因此,我目前有一个脚本,它从 csv 导入 samaccountnames 并获取名称、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
我需要完成的一件事是检查每个用户是否属于特定组,以及是否将其提取到 CSV 中的单独列中。它可以是通配符,例如,如果组是“this-*”,它将被拆分到单独的列中。
有任何想法吗?
------------编辑------编辑------编辑-------------------
我已经添加了
@{n='CertifyingGroup';e={($_.memberof -like “*org-*”)}}
它输出到 CSV LDAP /组的专有名称,但是当我添加替换函数时,我已经在脚本中使用它来删除那些无意义的内容以使其可读,它只返回 true 或 false
答案1
如果我正确理解了您的要求,这应该可以满足您的需要。
$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
希望能帮助到你?