はじめに
2つのデータリストのうち一方のリストに含まれていてもう一方に含まれていないデータをPowerShellで取得するにはnotin
演算子を利用すると便利である。
例
例えば、実際にはあまりないパターンかもしれないが、Office 365でGet-MsolUser
の取得結果に含まれるがGet-Mailbox
の取得結果には含まれないオブジェクトを抽出したリストを取得するには以下のようにすればよい。
この場合は両リストに備わっているUserPrincipalName
属性がキーとなる。
$ExOMBXs = Get-Mailbox -ResultSize Unlimited
Get-MsolUser -All | Where-Object {$_.UserPrincipalName -notin ($ExOMBXs).UserPrincipalName}
参考までに、同じことをForEach-Object
ですごく丁寧にしようとすると以下のようになる。
$ExOMBXs = Get-Mailbox -ResultSize Unlimited
$Datas = New-Object System.Collections.ArrayList
Get-MsolUser -All | ForEach-Object {
$UPN = $_.UserPrincipalName
$ExOMBX = $ExOMBXs | Where-Object {
$_.UserPrincipalName -eq $UPN
}
if($null -eq $ExOMBX){
[void]$Datas.Add($_)
}
}
$Datas
おわりに
今までは上記の後者の方法しか知らず、複雑なスクリプトが書けるオレSUGEEE!していた過去の自分をはたきたい。
以上