そのため、現在、csvからsamaccountnamesをインポートし、Name、samaccountname、ユーザーグループ、およびグループの説明を取得するスクリプトがあります。それぞれを個別の行に出力します。以下のスクリプト:
```
Import-Csv -Path .\users.csv | ForEach-Object{
$user = get-aduser -Identity $_.samaccountname -Properties name,
samaccountname, memberof
$(
if ($user.memberof.count -gt 1) {
foreach ($group in $user.MemberOf) {
$user | select name, samaccountname, @{n='group';e={$group -replace '^CN=(?<Name>.*?),(?:OU|CN).*$', '${Name}' -join ', '}}, @{n='GroupDescription';e={(Get-ADGroup $group -Properties description).description}}
}
} elseif ($user.MemberOf.Count -eq 1) {
$user | select name, samaccountname, @{n='group';e={$_.memberof | select
-f 1}}, @{n='GroupDescription';e={(Get-ADGroup $group -Properties
description).description}}
} else {
$user | select name, samaccountname, @{n='group';e={$_.memberof }},
@{n='GroupDescription';e={''}}
}
)
}| Export-Csv -path '' -NoTypeInformation
私が達成する必要がある1つのことは、各ユーザーが特定のグループのメンバーであるかどうか、およびCSVの独自の列にそれを引き出しているかどうかを確認することです。ワイルドカードにすることができます。たとえば、グループが「this- *」の場合、グループは独自の列に分割されます。
何か案は?
------------編集------編集------編集-------------------
これを追加しました
@{n='CertifyingGroup';e={($_.memberof -like “*org-*”)}}
これはCSVLDAP /グループの識別名に出力されますが、スクリプトですでに使用している置換関数を追加して、そのナンセンスを削除して読み取り可能にする場合、trueまたはfalseのみが返されます
私があなたの要件を正しく理解していれば、これはあなたが必要とすることをするはずです。
$users = Import-Csv -Path .\users.csv
#CertifyingGroup Lookup
$certifyingGroupQuerty = "Domain*"
$groupReport = foreach ($user in $users) {
$userAD = Get-ADUser -Identity $user.SamAccountName -Properties MemberOf
foreach ($groupDN in $userAD.MemberOf) {
$groupAD = Get-ADGroup -Identity $groupDN -Properties Description
$certifyingGroup = if ($groupAD.Name -like $certifyingGroupQuerty) { $groupAD.Name }
[PSCustomObject]@{
"UserName" = $userAD.Name
"UserSamAccountName" = $userAD.SamAccountName
"GroupName" = $groupAD.Name
"GroupDescription" = $groupAD.Description
"CertifyingGroup" = $certifyingGroup
}
}
}
$groupReport | Export-Csv -Path C:\GroupReport.csv -NoTypeInformation
それが役に立てば幸い?