PowerShell导出指定OU计算机AD组成员到CSV列对齐问题问询
问题原因
- 现有逻辑会为每台计算机按匹配到组的先后顺序动态添加
GroupN属性,没有提前统一所有匹配组的固定列顺序。例如第二台计算机匹配到的第一个组是admin2,就会直接填充到Group1列,最终导出时出现列错位。
解决方案
先统一拉取所有符合筛选条件的AD组,生成固定的组列顺序,遍历每台计算机时按固定列判断隶属关系,对应列填充组名或留空,保证所有计算机对象的属性列完全一致。
修改后代码
# 请先替换以下三个变量为实际值 $ou = "指定OU的可分辨名称" $server = "AD域控地址" $input_group = "admin" # 提前拉取所有符合筛选规则的AD组,排序后生成固定列顺序 $targetGroups = Get-ADGroup -Filter "Name -like '*$input_group*'" -Server $server | Sort-Object Name $groupTotal = $targetGroups.Count # 查询指定OU下的计算机对象 $All_computer = Get-ADComputer -Filter * -Property Name,DNSHostName,Description,MemberOf -SearchBase $ou -Server $server $computerExport = $All_computer | ForEach-Object { # 初始化基础属性 $outputObj = [pscustomobject]@{ Workstation = $_.Name Comp_Description = $_.Description DNS_Hostname = $_.DNSHostName } # 按固定组列顺序填充值,不属于对应组则留空 for ($i = 0; $i -lt $groupTotal; $i++) { $colName = "Group$($i+1)" $currentGroup = $targetGroups[$i] $colValue = if ($_.MemberOf -contains $currentGroup.DistinguishedName) { $currentGroup.Name } else { $null } $outputObj | Add-Member -MemberType NoteProperty -Name $colName -Value $colValue } $outputObj } # 导出CSV,指定UTF8编码避免中文乱码 $computerExport | Export-Csv .\Membership_status.csv -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

