为特定 OU 中的每个用户导出 AD SamAccountNames 和组的 CSV
Export CSV of AD SamAccountNames and Groups for every user in specific OU
我发现了一个类似的问题 ,但它不太符合我的需要,我很难调整它来做到这一点。
我需要为特定 OU 中的所有用户及其 AD 组成员身份创建一个 .csv
文件,格式如下:
User, Group (This is a Header)
User1, Group1
User1, Group2
User1, Group3
User2, Group1
User3, Group1
User4, Group1
User4, Group2
我认为这个脚本让我完成了大部分工作:
$Users = Get-ADGroup -SearchBase "OU=OrgUnit1,OU=OrgUnit2,OU=OrgUnit3,DC=XXX,DC=LOCAL" -Filter * `
| Get-ADGroupMember -Recursive `
| ForEach-Object { Get-ADUser $_ –Properties MemberOf | Select SamAccountName, MemberOf; } `
| Sort-Object SamAccountName
| export-csv C:\Messaging\PowerShell\ADUsers\Test1.csv
这个问题有两个方面。
我想搜索 OU=OrgUnit1
而不必搜索完整的专有名称,因为子 OU 并不总是相同的。
.csv
输出具有 AD 组的完整可分辨名称,我只需要没有限定符的组名称
使用Get-ADOrganizationalUnit
获取您要搜索的OU:
$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou | ...
memberOf
属性 是组列表(或者更确切地说是它们的可分辨名称)。要获得您想要的输出,您需要展开并解析组名并创建具有所需属性的新自定义对象:
... | ForEach-Object {
$account = $_.SamAccountName
$_.MemberOf | Get-ADGroup | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
SamAccountName = $account
Group = $_.Name
}
}
} | ...
此外,如果您在该管道的末尾将输出导出到文件,则将管道输出分配给变量 ($Users
) 毫无意义。
修改后的代码:
$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou |
Get-ADGroupMember -Recursive |
ForEach-Object { Get-ADUser $_ -Properties MemberOf; } |
Sort-Object SamAccountName |
ForEach-Object {
$account = $_.SamAccountName
$_.MemberOf | Get-ADGroup | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
SamAccountName = $account
Group = $_.Name
}
}
} | Export-Csv 'C:\Messaging\PowerShell\ADUsers\Test1.csv'
您不需要编写这么多代码。 PowerShell 中的用户下面的代码导出所有 AD 用户。
像这样:
Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties * | export-csv c:\ADusers.csv
如果您的广告很大,那可能需要一段时间。
我发现了一个类似的问题
我需要为特定 OU 中的所有用户及其 AD 组成员身份创建一个 .csv
文件,格式如下:
User, Group (This is a Header)
User1, Group1
User1, Group2
User1, Group3
User2, Group1
User3, Group1
User4, Group1
User4, Group2
我认为这个脚本让我完成了大部分工作:
$Users = Get-ADGroup -SearchBase "OU=OrgUnit1,OU=OrgUnit2,OU=OrgUnit3,DC=XXX,DC=LOCAL" -Filter * `
| Get-ADGroupMember -Recursive `
| ForEach-Object { Get-ADUser $_ –Properties MemberOf | Select SamAccountName, MemberOf; } `
| Sort-Object SamAccountName
| export-csv C:\Messaging\PowerShell\ADUsers\Test1.csv
这个问题有两个方面。
我想搜索
OU=OrgUnit1
而不必搜索完整的专有名称,因为子 OU 并不总是相同的。.csv
输出具有 AD 组的完整可分辨名称,我只需要没有限定符的组名称
使用Get-ADOrganizationalUnit
获取您要搜索的OU:
$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou | ...
memberOf
属性 是组列表(或者更确切地说是它们的可分辨名称)。要获得您想要的输出,您需要展开并解析组名并创建具有所需属性的新自定义对象:
... | ForEach-Object {
$account = $_.SamAccountName
$_.MemberOf | Get-ADGroup | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
SamAccountName = $account
Group = $_.Name
}
}
} | ...
此外,如果您在该管道的末尾将输出导出到文件,则将管道输出分配给变量 ($Users
) 毫无意义。
修改后的代码:
$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou |
Get-ADGroupMember -Recursive |
ForEach-Object { Get-ADUser $_ -Properties MemberOf; } |
Sort-Object SamAccountName |
ForEach-Object {
$account = $_.SamAccountName
$_.MemberOf | Get-ADGroup | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
SamAccountName = $account
Group = $_.Name
}
}
} | Export-Csv 'C:\Messaging\PowerShell\ADUsers\Test1.csv'
您不需要编写这么多代码。 PowerShell 中的用户下面的代码导出所有 AD 用户。
像这样:
Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties * | export-csv c:\ADusers.csv
如果您的广告很大,那可能需要一段时间。