2016-12-15 16 views
0

次のクエリは正常に動作します:の制限PowerShellの結果/出力

Get-ADUser -Filter 'Division -like "PNCC"' -Properties * | 
    Select-Object Name, @{name=”MemberOf”;expression={$_.memberof -join “;”}} | 
    Export-Csv test.txt -NoTypeInformation 

しかし、顧客の要件は、memberOfのグループの特定のサブセットを表示するようにしています。 返されるmemberofグループを、グループの親OUまたはグループ名のいずれかで制限するにはどうすればよいですか?親OUには3つの子OUがあります。これら3つの子OUの中には、実際のADグループがあります。

答えて

0

計算されたプロパティの式をフィルタなどで拡張します。

$groups = 'foo', 'bar' 

... | Select-Object Name, @{n='MemberOf';e={ 
    @($_.memberof | Get-ADGroup | Where-Object {$groups -contains $_.Name}) -join ';' 
}} | ... 
0

@Ansgarの回答はうまくいくと思いますが、ノイズが大きくなりすぎて最適化できないと思います。グループの数としては、通常(小さなハックと空のグループを収集避けるために)最初に報告すべきグループのdistinguishedNamesを収集するために賢くかもしれユーザーの数よりも低くする必要があります。

$groupsInOu = Get-ADGroup -SearchBase 'OU=DGG,DC=domain,DC=com' -LDAPFilter '(member=*)' | 
    ForEach-Object { $_.DistinguishedName } 
Get-ADUser -Filter 'Division -like "PNCC"' -Properties * | 
    Select-Object Name, @{name=”MemberOf”;expression={($_.memberof | Where-Object { $groupsInOu -contains $_ }) -join ';' } } | 
    Export-Csv test.txt -NoTypeInformation 

それとも、フィルタリングする場合名前(またはその他のプロパティ)で、私はあなたが値として気にプロパティ(またはプロパティ)でキーとADのオブジェクトとして識別名とハッシュテーブルを作成します。

$groupsHash = @{} 
Get-ADGroup -LDAPFilter '(member=*)' | 
    ForEach-Object { 
     $groupsHash.Add($_.DistinguishedName, $_) 
    } 

Get-ADUser -Filter 'Division -like "PNCC"' -Properties * | 
    Select-Object Name, @{name=”MemberOf”;expression={($_.memberof | Where-Object { $groupsHash[$_].Name -match 'someRegex' }) -join ';' } } | 
    Export-Csv test.txt -NoTypeInformation 

をまた、私はプロパティについて、より具体的になります私は(-Properties memberof)あなたがレポートで他のいくつかのプロパティを使用する予定がない限り、取得したいと思います。

+0

本当にありがとうございます。正確に私が必要としたもの。 – BDUB

+0

同様の問題を抱える他の人が、あなたのために働くアンカーをマークするのに役立ちます... – BartekB