我想查看OU A,只获取OU B中每个组的成员。
我的脚本获得了我想要的信息,但是它都在一个列表中,而不是每个组被分解,这使得它变得毫无用处。
理想情况下,我希望导出到excel,其中A列有组名(而不是DNs),B列有组成员。
我很感谢你的帮助。请看下面我已经得到的:
$DNs = Get-ADGroup -Filter * -SearchBase "OU A" | ForEach { $_.DistinguishedName }
ForEach ($i in $DNs) {
Get-ADComputer -Filter {memberof -eq $i} -SearchBase "OU B" | Select-Object Name
}发布于 2018-05-15 16:19:12
因为由DistinguishedName返回的Get-ADGroupMember有OU信息,所以您可以从前面删除CN=ObjectName,,然后比较文本。然后使用-eq确保子‘t不匹配。
$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对象,然后检查成员是否在该集合中。这种方法更清晰,因为它不依赖于文本解析,但稍微需要更多的资源。
$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的代码。请注意,这将返回DNs而不是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发布于 2018-05-15 15:35:20
我能够在我的环境中完成这项工作,所以它应该在您的环境中进行一些必要的更改。如果你有什么问题请告诉我,我可以帮忙。
要获取给定组A和B中的AD用户:$ADGroups = group -filter * -SearchBase "OU=A,DC=zone,DC=domain,DC=com“$report = @() Foreach ($Group in ($ADGroups?{ $_.DistinguishedName -like "OU=B”})) { try{ $members = Get-ADGroupMember $group.Name $object = pscustomobject@{ -identity =$object;GroupMembers = "$($members.name -join ";")";} $report += $object } catch {写主机“找不到AD组成员”}}
$report | Export-CSV -NoTypeInformation -Path "C:\Temp\Test.csv"要从A和B中的ADComputers中获取B中的ADGroups:
$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"第二个条件有效,但在我自己的网络中,对于我所执行的有限搜索,我没有结果。试一试,我们可以根据需要调整它。
https://stackoverflow.com/questions/50352915
复制相似问题