Zur Kompatibilität mit älteren Powershell-Versionen Sie dieses Cmdlet interessieren könnten:
Function Order-Keys {
param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true)][HashTable]$HashTable,
[Parameter(Mandatory = $false, Position = 1)][ScriptBlock]$Function,
[Switch]$Descending
)
$Keys = $HashTable.Keys | ForEach {$_} #Copy HashTable+KeyCollection
For ($i = 0; $i -lt $Keys.Count - 1; $i++) {
For ($j = $i + 1; $j -lt $Keys.Count; $j++) {
$a = $Keys[$i]
$b = $Keys[$j]
If ($Function -is "ScriptBlock") {
$a = $HashTable[$a] | ForEach $Function
$b = $HashTable[$b] | ForEach $Function
}
If ($Descending) {$Swap = $a -lt $b} Else {$Swap = $a -gt $b}
If ($Swap) {$Keys[$i], $Keys[$j] = $Keys[$j], $Keys[$i]}
}
}
Return $Keys
}
Dieses Cmdlet gibt eine Liste der Schlüssel von der Funktionsdefinition bestellt:
Sortieren nach Name:
$HashTable | Order-Keys | ForEach {Write-Host $_ $HashTable[$_]}
germany berlin
italy rome
spain madrid
switzerland berne
Nach Wert sortieren:
$HashTable | Order-Keys {$_} | ForEach {Write-Host $_ $HashTable[$_]}
germany berlin
switzerland berne
spain madrid
italy rome
Sie auch zu nisten Hash-Tabellen betrachten könnte:
$HashTable = @{
switzerland = @{Order = 1; Capital = "berne"}
germany = @{Order = 2; Capital = "berlin"}
spain = @{Order = 3; Capital = "madrid"}
italy = @{Order = 4; Capital = "rome"}
}
Z.B. Sortierung (gehasht) um propery und den Schlüssel zurückzugeben (Land):
$HashTable | Order-Keys {$_.Order} | ForEach {$_}
Oder sortieren (absteigend) durch vordefinierte Kapital
$HashTable | Order-Keys {$_.Capital} -Descending | ForEach {$_}
Danke für die Antworten! Ich kannte die PS v3 [geordert], aber ich muss PS 2.0 verwenden – Phil