我想查看_id
并仅获取OU A
中每个群组的成员。
我的脚本获取了我想要的信息,但它们都在一个列表中,而不是按组分解,这使得它无用。
理想情况下,我想导出到具有组名(而不是DN)的列A和具有组成员的列B的Excel。
我感谢任何帮助。请参阅下文,了解我已经获得的内容:
OU B
答案 0 :(得分:0)
我能够在我的环境中完成这项工作,因此它应该在您的工作中进行一些必要的更改。如果您有任何问题,请告诉我,我们可以提供协助。
获取给定组A和B中的AD用户: $ ADGroups = Get-ADGroup -filter * -SearchBase" OU = A,DC = zone,DC = domain,DC = com" $ report = @() Foreach($ Group in($ ADGroups |?{$ _.DistinguishedName-like" OU = B "})) { 尝试{ $ members = Get-ADGroupMember -identity $ group.Name $ object = [pscustomobject] @ { GroupName = $ group.Name; GroupMembers =" $($ members.name -join&#34 ;;")&#34 ;; } $ report + = $ object } 抓住 { 写主机"无法找到AD组成员" } }
$report | Export-CSV -NoTypeInformation -Path "C:\Temp\Test.csv"
从A和B中的ADGroups获取B中的ADComputers:
$ADGroups = Get-ADGroup -filter * -SearchBase "OU=A,DC=zone,DC=domain,DC=com"
$report = @()
Foreach ($Group in ($ADGroups | ? { $_.DistinguishedName -like "*OU=B*" }))
{
try{
<#
$members = Get-ADGroupMember -identity $group.Name
#>
$members = -Filter * -Property MemberOf -SearchBase "OU=B,DC=zone,DC=domain,DC=com" | Where-Object { $_.memberOf -like "*$($group.name)*" }
$object = [pscustomobject]@{
GroupName = $group.Name;
GroupMembers = "$($members.name -join ";")";
}
$report += $object
}
catch
{
Write-Host "Unable to find AD Group Members"
}
}
$report | Export-CSV -NoTypeInformation -Path "C:\Temp\Test.csv"
第二个条件有效,但我在自己的网络中没有结果用于我正在执行的有限搜索。尝试一下,我们可以根据需要调整它。
答案 1 :(得分:0)
由于DistinguishedName
返回的Get-ADGroupMember
包含OU信息,您可以从前面删除CN=ObjectName,
,然后比较文本。然后使用-eq
确保subOU不匹配。
$Data = Get-ADGroup -Filter * -SearchBase "OU A" | ForEach-Object {
$GroupName = $_.Name
Get-ADGroupMember $_.DistinguishedName |
Where-Object {($_.DistinguishedName -replace '^CN=.*?,OU','OU') -eq "OU=B,DC=Example"} |
ForEach-Object {
[PSCustomObject]@{
Name = $GroupName
Member = $_.Name
}
}
}
$Data | Export-CSV C:\Example.csv -NoTypeInformation
或者,您可以预先检索OU B对象,然后检查该成员是否在该集合中。这种方法更加干净,因为它不依赖于文本解析,但是资源密集程度稍高。
$OUBObjects = Get-ADObject -Filter * -SearchBase "OU B" | Select-Object -ExpandProperty DistinguishedName
$Data = Get-ADGroup -Filter * -SearchBase "OU A" | ForEach-Object {
$GroupName = $_.Name
Get-ADGroupMember $_ |
Where-Object {$_.DistinguishedName -in $OUBObjects} |
ForEach-Object {
[PSCustomObject]@{
Name = $GroupName
Member = $_.Name
}
}
}
$Data | Export-CSV C:\Example.csv -NoTypeInformation
编辑:
以下是使用Get-ADGroup -Properties Members
代替Get-ADGroupMember
的代码。请注意,这将返回DN而不是sAMAccountNames
$OUBObjects = Get-ADObject -Filter * -SearchBase "OU B" | Select-Object -ExpandProperty DistinguishedName
$Data = Get-ADGroup -Filter * -SearchBase "OU A" -Properties Members | ForEach-Object {
$GroupName = $_.Name
$_.members |
Where-Object {$_ -in $OUBObjects} |
ForEach-Object {
[PSCustomObject]@{
Name = $GroupName
Member = $_
}
}
}
$Data | Export-CSV C:\Example.csv -NoTypeInformation