【问题标题】:Powershell Sort-ObjectPowershell 排序对象
【发布时间】:2014-03-03 18:28:59
【问题描述】:

我有一个“xml-node”对象数组:

xml-node object:
    node <---------- this object is the one that has 3 other attributes (see below)
    path
    pattern

Node:
filename
modification
type

问题:

我想根据“修改”属性对这个 xml 节点数组进行排序; 我该怎么办?

我试过了:

$nodes | sort-object Node.modification 

【问题讨论】:

    标签: arrays sorting powershell


    【解决方案1】:

    仅将属性名称用于按对象的直接属性排序。

    $nodes | sort-object modification
    

    您还可以使用 ScriptBlock 对对象进行排序。所以这也可以:

    $nodes | sort-object { $_.modification }
    

    显然这本身并不是很有用,但是如果您想以某种方式对对象进行排序而不是简单的属性,您可以在 ScriptBlock 中操作属性。

    例如,按进程名称中的最后一个字符对进程进行排序。

    get-process| sort-object { $_.name[-1] }
    

    编辑:

    访问属性的属性:

    $nodes | sort-object { $_.node.modification }
    

    【讨论】:

    • 抱歉,我不得不编辑我的问题; “修改”属性更深一层;这就是我有点卡住的地方;
    • 非常有帮助,谢谢!所以有可能把它作为一个排序列表吗?比如,我可以去吗:$x = $nodes | sort-object { $_.node.modification } 或类似的东西(现在,$x 没有排序;我尝试将结果通过管道传递给 ... | select $_;这也不起作用?
    • 是的,$x = $nodes | sort-object { $_.node.modification } 应该导致 $x 具有排序列表。
    • 你完全正确!谢谢瑞南。给你加一个。我会将您的标记为已回答;并在下面发布一个完整的示例示例,以防万一其他人想知道......再次感谢!
    【解决方案2】:

    这是一个证明 Rynant 的解决方案确实有效的示例:

    cls
    
    $node1 = New-Object PSObject
    Add-Member -InputObject $node1 -MemberType NoteProperty -Name fileName -Value "textfile1.txt";  
    Add-Member -InputObject $node1 -MemberType NoteProperty -Name fileType -Value "text";  
    Add-Member -InputObject $node1 -MemberType NoteProperty -Name modification -Value "2014-02-24";  
    $node2 = New-Object PSObject
    Add-Member -InputObject $node2 -MemberType NoteProperty -Name fileName -Value "textfile2.txt";  
    Add-Member -InputObject $node2 -MemberType NoteProperty -Name fileType -Value "text";  
    Add-Member -InputObject $node2 -MemberType NoteProperty -Name modification -Value "2014-03-01";  
    $node3 = New-Object PSObject
    Add-Member -InputObject $node3 -MemberType NoteProperty -Name fileName -Value "textfile3.txt";  
    Add-Member -InputObject $node3 -MemberType NoteProperty -Name fileType -Value "text";  
    Add-Member -InputObject $node3 -MemberType NoteProperty -Name modification -Value "2014-02-21";  
    $node4 = New-Object PSObject
    Add-Member -InputObject $node4 -MemberType NoteProperty -Name fileName -Value "textfile4.txt";  
    Add-Member -InputObject $node4 -MemberType NoteProperty -Name fileType -Value "text";  
    Add-Member -InputObject $node4 -MemberType NoteProperty -Name modification -Value "2014-02-22";  
    
    $result1 = New-Object PSObject
    Add-Member -InputObject $result1 -MemberType NoteProperty -Name Node -Value $node1;  
    Add-Member -InputObject $result1 -MemberType NoteProperty -Name Path -Value "aaa";  
    Add-Member -InputObject $result1 -MemberType NoteProperty -Name Pattern -Value "aaa/aaa[@aaa='aaa']";  
    
    $result2 = New-Object PSObject
    Add-Member -InputObject $result2 -MemberType NoteProperty -Name Node -Value $node2;  
    Add-Member -InputObject $result2 -MemberType NoteProperty -Name Path -Value "bbb";  
    Add-Member -InputObject $result2 -MemberType NoteProperty -Name Pattern -Value "bbb/bbb[@bbb='bbb']";  
    
    $result3 = New-Object PSObject
    Add-Member -InputObject $result3 -MemberType NoteProperty -Name Node -Value $node3;  
    Add-Member -InputObject $result3 -MemberType NoteProperty -Name Path -Value "ccc";  
    Add-Member -InputObject $result3 -MemberType NoteProperty -Name Pattern -Value "ccc/ccc[@ccc='ccc']";  
    
    $result4 = New-Object PSObject
    Add-Member -InputObject $result4 -MemberType NoteProperty -Name Node -Value $node4;  
    Add-Member -InputObject $result4 -MemberType NoteProperty -Name Path -Value "ddd";  
    Add-Member -InputObject $result4 -MemberType NoteProperty -Name Pattern -Value "ddd/ddd[@ddd='ddd']";  
    
    
    $results = @()
    $results += $result1
    $results += $result2, $result3, $result4
    
    $x = $results | sort-object { $_.Node.modification }; 
    $y = $results | sort-object { $_.Node.modification } -desc; 
    
    $x
    $y
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-13
      • 2021-08-06
      • 2019-01-04
      • 2021-11-25
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多