You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:16:14