我绝不是一个 powershell 专业人士,我需要一些指导来完成我需要做的事情。
我需要从 AD 生成一个包含以下列的 csv:
名称、Samaccountname、Memberof 和组成员描述。目前,我使用以下方法获取前 3 个:
Import-Csv .\users.csv |
ForEach-Object{
Get-ADUser -Identity $_.samaccountname -Properties * | Select-Object -Property Name,SamAccountName, @{n='MemberOf'; e= { $_.memberof -replace '^CN=(?<Name>.*?),(?:OU|CN).*$', '${Name}' -join ', ' | Out-String}} | Sort-Object -Property Name
}| Export-Csv -Path 'C:\Users\xxxx\Membership.csv' -NoTypeInformation
我遇到的麻烦是想办法打印出组描述,使它们的顺序与组名相同。这样,一旦它们进入 excel,我就可以使用 VBA 来获取它们,这样它们就不会被逗号分隔,也不会在每个单元格中单独显示
任何想法或提示都会有帮助
奖励回合:还需要取一个特定的组名并将其分成自己的列。
答案1
我认为这将满足您的需求。请随意将用户过滤器替换为您的 users.csv。
Get-ADUser -Filter * |`
ForEach-Object { `
$FileName = $_.SamAccountName + ".csv" ; `
$FileName ; `
Get-ADPrincipalGroupMembership $_ | `
Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | `
Sort-Object -Property SamAccountName | `
Export-Csv -Path $FileName -Encoding ASCII ; `
}
每个用户都会获得自己的包含 sam/name 和 groups 的 CSV。
编辑:
这将生成一个表,其中每个组、组描述、名称和 sam 位于一行上。
ForEach ($Group in (Get-ADGroup -Filter * -properties *)) { Get-ADGroupMember $Group | Select @{Label="Group";Expression={$Group.Name,$Group.Description}},Name,SamAccountName}