代码之家  ›  专栏  ›  技术社区  ›  surge3333

PowerShell脚本在执行多个查询时返回不同的结果

  •  1
  • surge3333  · 技术社区  · 6 月前

    我对一个xml文件有两个单独的查询,当我分别运行它们时,它们工作得很好。但是,当我在同一个脚本中运行它们时,第二个查询的输出是不正确的。

    输入文件看起来像这样:

    <?xml version='1.0' encoding='UTF-8' standalone='no'?>
    <Safex>
        <Add>
            <User folder="/" name="D2\\[email protected]">
                <GroupMembership>ADMINS</GroupMembership>
                <GroupMembership>WebService</GroupMembership>
            </User>
            <User folder="/" name="D2\\[email protected]">
                <GroupMembership>WebService</GroupMembership>
            </User>
            <User folder="/" name="D2\\[email protected]">
                <GroupMembership>WebService</GroupMembership>
            </User>
            <User folder="/" name="D2\\[email protected]">
                <GroupMembership>ADMINS</GroupMembership>
            </User>
            <User folder="/" name="D2\\[email protected]">
                <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\\[email protected]    {ADMINS, WebService}
    D2\\[email protected]   WebService          
    D2\\[email protected]  WebService          
    D2\\[email protected]   ADMINS              
    D2\\[email protected] WebService 
    

    当我把$a注释掉时,$b返回以下内容:

    Name               GroupMembership     
    ----               ---------------     
    D2\\[email protected]    {ADMINS, WebService}
    D2\\[email protected]   WebService          
    D2\\[email protected]  WebService          
    D2\\[email protected] WebService 
    

    当我没有注释$a和$b时,我会得到这样的结果:

    Name               Group               
    ----               -----               
    D2\\[email protected]    {ADMINS, WebService}
    D2\\[email protected]   WebService          
    D2\\[email protected]  WebService          
    D2\\[email protected]   ADMINS              
    D2\\[email protected] WebService          
    D2\\[email protected]                        
    D2\\[email protected]                       
    D2\\[email protected]                      
    D2\\[email protected]  
    

    我似乎不明白为什么当$a和$b都没有注释时,$b的标题不会出现,GroupMembership值也不会出现。

    感谢您提供的任何帮助。

    1 回复  |  直到 6 月前
        1
  •  2
  •   Santiago Squarzon    6 月前

    在两个对象数组中使用相同的属性名(相同的标头)( $a $b )那么你的代码就可以正常工作了。否则,您将遇到与中解释的问题类似的问题 PowerShell Export-CSV - Missing Columns .

    $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, @{ N = 'Group'; E = 'GroupMembership' }
    
    $b