Сортировка Powershell-Объект
У меня есть массив объектов "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-узлов на основе атрибута " modification; как мне это сделать?
Я пробовал:
$nodes | sort-object Node.modification
2 ответов
используйте имя свойства только для сортировки по непосредственным свойствам объекта.
$nodes | sort-object modification
вы также можете использовать ScriptBlock для сортировки объектов. Так что это тоже сработает:
$nodes | sort-object { $_.modification }
очевидно, что это не очень полезно само по себе, но если вы хотите отсортировать объекты каким-либо образом, кроме просто свойства, вы можете управлять свойствами внутри ScriptBlock.
например, для сортировки процессов по последнему chatacter в процессе имя.
get-process| sort-object { $_.name[-1] }
Edit:
для доступа к свойству объекта:
$nodes | sort-object { $_.node.modification }
вот пример, который доказывает, что решение Райнанта действительно работает:
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