如何在多个对象的Powershell中组合属性

很多时候,我需要将只能从两个独立的PowerShell CMDLET中检索的数据合并到一个数据集中才能导出。 我相信这应该可以通过创build一个PSObject并在那里收集数据,然后从PSOBject中select数据并导出。

我想要做的一个例子。 这还不行。

$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脚本$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName

它看起来像你试图将多个对象的属性组合到输出stream中。 我认为完成目标的最好方法是利用pipe线上的计算属性。 但是,在您的代码示例中, MBXProps是一个未声明的variables,可能是导致您的进程无法正常工作的主要原因。 尽pipe你可能已经select了代码来向我们展示(通常是一个坏主意),所以我假设你正在尝试将MBX DN与你的数据集合在一起。

 $MBXStats = get-mailbox -OrganizationalUnit $OU1 | Get-MailboxStatistics $MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName $MBXStats | Select *,@{N="DistinguishedName";E="$($MBXDN.DistinguishedName)"} 

总而言之,你想要做的是将一个计算的属性添加到输出。 我估计所有的*属性而不是你select的几个,但是你可以适应你的需要。 值得注意的是,你应该总是输出对象来利用Powershell的真正威力。