批量查询多台计算机AD组归属并关联对应主机的PowerShell需求
解决方案
1. 查看每台计算机的组归属(带关联标识)
直接管道传递计算机名时,Get-ADPrincipalGroupMembership不会保留原计算机的对应关系。用ForEach-Object逐个处理每台计算机,给结果添加ComputerName属性即可解决:
$Computers = "pc1", "pc2", "pc3" $Computers | ForEach-Object { $currentPC = $_ Get-ADPrincipalGroupMembership -Identity $currentPC | Select-Object @{Name='ComputerName'; Expression={$currentPC}}, Name, DistinguishedName }
执行后,输出的每一行都会明确显示对应的计算机名、组名称和组的完整LDAP路径,清晰对应每台机器的组归属。
2. 快速对比所有计算机的组是否完全一致
如果要直接确认所有计算机的组是否完全相同,可以先收集每台机器的组集合,再以其中一台为基准逐一对比:
$Computers = "pc1", "pc2", "pc3" # 用哈希表存储每台计算机的组(排序后便于对比) $pcGroupMap = @{} $Computers | ForEach-Object { $groups = Get-ADPrincipalGroupMembership -Identity $_ | Select-Object -ExpandProperty Name | Sort-Object $pcGroupMap[$_] = $groups } # 以第一台计算机的组为基准,检查其他机器的差异 $baseGroups = $pcGroupMap[$Computers[0]] $allMatch = $true foreach ($pc in $Computers[1..($Computers.Count-1)]) { $diff = Compare-Object -ReferenceObject $baseGroups -DifferenceObject $pcGroupMap[$pc] if ($diff) { $allMatch = $false Write-Host "`n$pc 与 $($Computers[0]) 的组存在差异:" $diff | Format-Table SideIndicator, InputObject -AutoSize } } if ($allMatch) { Write-Host "`n所有计算机的AD组归属完全相同" }
这段代码会自动检测差异:如果某台机器的组和基准机器不一样,会列出多出来或缺少的组;如果全部一致,会直接给出提示。
内容的提问来源于stack exchange,提问作者ChallengedSimpleton
相关产品推荐
相关产品推荐

