web-dev-qa-db-ja.com

複数のオブジェクトからPowershellでプロパティを組み合わせる方法

2つの別個のpowershell CMDLETからのみ取得できるデータを1つのデータセットに結合してエクスポートする必要が何度もありました。これは、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のデータ収集をスクリプトに統合し始める方法すらわかりません。

3
Prince Vultan

複数のオブジェクトのプロパティを出力ストリームに結合しようとしているようです。あなたの目標を達成する最良の方法は、パイプラインで計算されたプロパティを活用することだと思います。ただし、コード例では、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の真の力を活用するために、常にオブジェクトを出力するようにしてください。

3
Colyn1337