PowerShell脚本执行多XML查询时返回结果异常求助
问题:PowerShell中同时运行两个XML查询时第二个结果异常
输入XML文件
<?xml version='1.0' encoding='UTF-8' standalone='no'?> <Safex> <Add> <User folder="/" name="D2\FRED@D2.com"> <GroupMembership>ADMINS</GroupMembership> <GroupMembership>WebService</GroupMembership> </User> <User folder="/" name="D2\WILMA@D2.com"> <GroupMembership>WebService</GroupMembership> </User> <User folder="/" name="D2\BARNEY@D2.com"> <GroupMembership>WebService</GroupMembership> </User> <User folder="/" name="D2\BETTY@D2.com"> <GroupMembership>ADMINS</GroupMembership> </User> <User folder="/" name="D2\PEBBLES@D2.com"> <GroupMembership>WebService</GroupMembership> </User> </Add> </Safex>
问题脚本
[xml]$xml = Get-Content $InputPath\test002.xml $a = $xml.Safex.Add.User | ForEach-Object { [PSCustomObject]@{ 'Name' = $_.name 'Group' = $_.GroupMembership } } $a $b = $xml.Safex.Add.User | Where-Object { $_.GroupMembership -eq 'WebService' } | Select-Object @{Name = 'Name'; Expression = {$_.Name}}, GroupMembership $b
单独运行结果
- 注释
$b时,$a输出正常:
Name Group ---- ----- D2\FRED@D2.com {ADMINS, WebService} D2\WILMA@D2.com WebService D2\BARNEY@D2.com WebService D2\BETTY@D2.com ADMINS D2\PEBBLES@D2.com WebService
- 注释
$a时,$b输出正常:
Name GroupMembership ---- --------------- D2\FRED@D2.com {ADMINS, WebService} D2\WILMA@D2.com WebService D2\BARNEY@D2.com WebService D2\PEBBLES@D2.com WebService
异常现象
同时取消$a和$b的注释后,$b的表头不显示,且GroupMembership的值丢失,输出格式混乱。
原因
PowerShell在连续输出多个对象集合时,会默认沿用第一个集合的列结构来格式化后续输出。因为$a的列是Name和Group,而$b的列是Name和GroupMembership,后续的$b会被强制适配$a的列模板,导致GroupMembership列被忽略,表头也只显示$a的表头。
解决方法
方法1:强制指定格式化规则
对每个集合使用Format-Table明确指定列,确保各自的格式独立:
$a | Format-Table Name, Group -AutoSize $b | Format-Table Name, GroupMembership -AutoSize
方法2:分隔输出上下文
用Write-Host添加分隔标识,让PowerShell重新识别后续集合的列结构:
Write-Host "--- 结果A ---" $a Write-Host "--- 结果B ---" $b
方法3:输出为字符串或文件
将结果转为字符串输出,或分别写入文件,避免格式冲突:
# 转为字符串输出 $a | Out-String $b | Out-String # 写入文件 $a | Out-File -Path "$InputPath\result_a.txt" $b | Out-File -Path "$InputPath\result_b.txt"
内容的提问来源于stack exchange,提问作者surge3333
相关产品推荐
相关产品推荐

