Wenn Sie nur sortieren möchten, verwenden Sie einfach einen ScriptBlock zum Sortieren nach:
cat .\uncshares.txt | Sort { Test-Connection -Count 1 -CN $_.split('\')[2] }
Oder könnten Sie einen Durchschnitt verwenden:
cat .\uncshares.txt | Sort { Test-Connection -Count 3 -CN $_.split('\')[2] | Measure ResponseTime -Average | Select -Expand Average }
Es ist wahr, dass, wenn Sie Daten zu einem Objekt hinzufügen möchten, sollten Sie Add-Member. In diesem Fall könnten Sie ein NoteProperty
mit dem Ergebnis des Ping hinzufügen, aber es ist interessanter, eine Script-Eigenschaft (oder Methode) namens ping hinzuzufügen, die tatsächlich ausführen würde der Ping. Das heißt, es wird das Ping tun, wenn Sie das Ping-Mitglied anrufen:
$Shares = cat .\uncshares.txt | Add-Member ScriptProperty Ping -Passthru -Value {
Test-Connection $this.split('\')[2] -Count 1 |
Select -Expand ResponseTime }
# Each time you sort by it, it will re-ping, notice the delay:
$Shares | Sort Ping
Sie den Durchschnitt mit dieser Methode verwenden:
$Shares = cat .\uncshares.txt | Add-Member ScriptProperty Ping -Passthru -Value {
(Test-Connection $this.split('\')[2] -Count 3 |
Measure ResponseTime -Average).Average }
# But this will take even longer:
$Shares | Sort Ping
Als Alternative zur Add-Member (wenn Sie tun NICHT wollen jedes Mal neu ping), können Sie Select-Object aufbauen Objekte verwenden, so könnten Sie ein Ping-Objekt erstellen und dann den Freigabenamen wie so etwas hinzufügen zurück:
$unc = cat .\uncshares.txt
## Gotta love backslashes in regex. Not...
$unc -replace '\\\\([^\\]+)\\.*','$1' |
Test-Connection -Count 1 -CN {$_} |
Sort ResponseTime |
Select @{n='Server';e={$_.Address}},
@{n='Share'; e={$unc -match $_.Address}},
@{n='Ping'; e={$_.ResponseTime}}
das erlaubt Ihnen, drastisch anders haben Miete-Ausgabe, weil Sie mehrere Objekte zusammen kombinieren ...
Leider scheint dies nicht den Trick zu tun. Es berechnet nett die Antwortzeit für jede Freigabe (gute Idee, Split zu verwenden, um den Servernamen zu erhalten!), Aber es gibt immer noch unc Pfade in der Reihenfolge zurück, in der sie in der Eingabeliste eingetragen sind. – Newanja
Ich weiß nicht, was ich Ihnen sagen soll. Ich führe es mit diesen Testdaten aus: $ list = "\\ www.google.com \ stuff \ othersstuff", "\\ www.stackoverflow.com \ knowlege", "\\ localhost \ test" und füge dann -desc hinzu sortieren und wiederholen, alles kommt in umgekehrter Reihenfolge. – mjolinor
Ich habe gerade versucht, die Reihenfolge der Eingabeliste neu anzuordnen, und die Reihenfolge der Ausgabe bleibt gleich. Ich kann die Ergebnisse, die Sie beschreiben, nicht erneut erstellen. – mjolinor