很多时候我需要将只能从两个单独的 powershell CMDLET 中检索的数据合并为一个数据集以供导出。我认为这应该可以通过创建一个 PSObject 并在其中收集数据,然后从 PSOBject 中选择数据并将其导出来实现。
我正在尝试做的一个示例。这还不起作用。
$OU1 = 'Contoso.com/Contoso Service Accounts'
$MBXStats = get-mailbox -OrganizationalUnit $OU1 | Get-MailboxStatistics
$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName
$bucket = @()
foreach ($MBX in $MBXStats){
$PropertyObj = New-Object psobject -Property @{
DisplayName = $MBXStats.DisplayName
ItemCount = $MBXStats.ItemCount
TotalItemSize = $MBXStats.TotalItemSize
LastLogonTime = $MBXStats.LastLogonTime
OriginatingServer = $MBXStats.OriginatingServer
DistinguishedName = $MBXProps.DistinguishedName
}
$bucket += $PropertyObj
}
$bucket | Out-GridView
我甚至不知道如何开始将数据收集集成$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName
到脚本中。
答案1
看起来您正在尝试将多个对象的属性组合到输出流上。我认为实现目标的最佳方法是利用管道上的计算属性。但是,您的代码示例中MBXProps
有一个未声明的变量,这可能是导致您的流程无法正常工作的主要原因。虽然您可能已经挑选了要向我们展示的代码(通常是一个坏主意),所以我假设您正在尝试将 MBX DN 与您的数据集集成。
$MBXStats = get-mailbox -OrganizationalUnit $OU1 | Get-MailboxStatistics
$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName
$MBXStats | Select *,@{N="DistinguishedName";E="$($MBXDN.DistinguishedName)"}
概括来说,你要做的是添加一个计算财产输出。我有点懒,只评估所有*
属性,而不是您选择的几个,但您可以根据自己的需要进行调整。值得注意的是,您应该尝试始终输出对象以充分利用 Powershell 的真正威力。