0

私はpowershellの初心者で、スクリプトを作成しようとしています。私はユーザーのリストを持っています。ユーザーがどの DL に追加されているかを知る必要があります。

私が直面している問題は、DL のリストのみが表示されることです。ユーザー名で DL を取得する方法はありますか? またはこれを達成するためのより良い方法。

注: すべての DL に大文字で名前を付けているため、where-object で "\b[A-Z0-9_]+\b" を使用しています。

$users = import-csv C:\Test\users.csv | ForEach-Object {$_.users = $_.users.Trim(); $_}  | Select-Object -ExpandProperty users

foreach ( $user in $users)

{get-ADPrincipalGroupMembership $user | select name |

Where-Object { $_.name -cmatch "\b[A-Z0-9_]+\b"} | Export-CSV "C:\test\output_file.csv" -NoTypeInformation -Append

}

これで、次の結果が得られました。

Group1
Group2
Group3
Group2
Group3
Group4

私の理想的な出力は、次のようなものです。

User  MemberOf
----  --------
Bob   Group1, Group2, Group3....
Jim   Group2, Group3, Group4....

どうもありがとう。

4

1 に答える 1

0

配布リストを探していると仮定すると、オブジェクトのプロパティを調べることで、グループがセキュリティ グループであるか配布リストであるかがわかります。GroupCategoryADGroup

ユーザーのmemberOf属性を調べて検索できる属性を見つける代わりに、ユーザーがどこにあるDistributionかを検索できます。ADGroupsGroupCategory -eq 'Distribution'member

$users = (Import-CSV C:\Test\users.csv | ForEach-Object {
    $_.users.Trim()
}).users

$result = foreach ($user in $users)
{
    $userDN = (Get-ADUser $user).DistinguishedName
    $groups = Get-ADGroup -Filter "member -eq '$userDN' -and groupCategory -eq 'Distribution'"
    
    [pscustomobject]@{
        User = $user
        MemberOf = $groups.Name -join ', '
    }
}

$result | Export-CSV "C:\test\output_file.csv" -NoTypeInformation

既に持っているコードを使用したい場合、このマイナー アップデートにより、探している結果が得られるはずです。

$users = (Import-CSV C:\Test\users.csv | ForEach-Object {
    $_.users.Trim()
}).users

$result = foreach ($user in $users)
{
    $membership = Get-ADPrincipalGroupMembership $user |
    Where-Object {
        $_.name -cmatch "\b[A-Z0-9_]+\b"
    }

    [pscustomobject]@{
        User = $user
        MemberOf = $membership.Name -join ', '
    }
}

$result | Export-CSV "C:\test\output_file.csv" -NoTypeInformation
于 2021-07-06T15:46:22.533 に答える