Wie ich im PowerShell-Benutzerhandbuch lese, besteht eines der wichtigsten PowerShell-Konzepte darin, dass Befehle Objekte anstelle von Text akzeptieren und zurückgeben . get-alias
Wenn ich zum Beispiel laufe, bekomme ich eine Reihe von System.Management.Automation.AliasInfo
Objekten zurück:
PS Z: \> get-alias CommandType Name Definition ----------- ---- ---------- Alias% ForEach-Object Alias ? Wo-Objekt Alias ac Add-Content Alias asnp Add-PSSnapIn Alias Katze Get-Content Alias cd Set-Location Alias chdir Set-Location ...
Nun, wie bekomme ich die Zählung dieser Objekte?
powershell
scripting
ulidtko
quelle
quelle
$Counter = $(get-alias | measure).Count
da es immer den Wert 1 zurückgibt, falls es nur ein Vorkommen gibt, genau wie Sie gesagt haben.get-alias | measure | % { $_.Count }
measure
ist die Abkürzung fürMeasure-Object
; und gibt eine Menge anderer Sachen - wieAverage
,Sum
,Maximum
usw ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
loswerden zu%
und{}
. Was einfacher zu schreiben und zu lesen ist, ist für eine andere Diskussion.So kurz wie @ jumbos Antwort lautet :-) Sie können es noch knapper machen. Dies gibt nur die
Count
Eigenschaft des Arrays zurück, das vom vorangegangenen Unterausdruck zurückgegeben wird:Ein paar Punkte zu beachten:
Sie können einen beliebig komplexen Ausdruck anstelle von
Get-Alias
beispielsweise setzen:Das anfängliche Vorzeichen (@) ist für eine robuste Lösung erforderlich . Solange die Antwort zwei oder mehr ist, erhalten Sie eine äquivalente Antwort mit oder ohne @, aber wenn die Antwort null oder eins ist, erhalten Sie keine Ausgabe, es sei denn, Sie haben das @ -Zeichen! (Erzwingt das Vorhandensein der
Count
Eigenschaft, indem die Ausgabe als Array erzwungen wird.)2012.01.30 Update
Dies gilt für PowerShell V2. Eine der neuen Funktionen von PowerShell V3 besteht darin, dass Sie
Count
selbst für Singletons eine Eigenschaft haben , sodass das At-Sign für dieses Szenario unwichtig wird.quelle
Set-StrictMode -Version Latest
es verwendet wird. Ich bin heute (auf 5.1) darauf gestoßen - etwas, das interaktiv funktioniert hat und in einer Funktion nicht funktioniert hat. Ich habe es auf die Funktion zurückverfolgt, in der Set-StrictMode enthalten ist. Wenn ich den strengen Modus interaktiv eingestellt habe, hat es auch nicht funktioniert.Set-StrictMode
, also hätte ich das bemerken sollen.if ($myObject.PSobject.Properties.Name -contains "count")
(von stackoverflow.com/questions/26997511/… ), bevor ich versuche, die count-Eigenschaft zu testen. Ich hasse es, dass PoSH mich dazu bringt, aber der strikte Modus ist es wert.Verwenden Sie einfach Klammern und 'zählen'. Dies gilt für Powershell v3
quelle
@($output).Count
führt nicht immer zu korrekten Ergebnissen. Ich habe die($output | Measure).Count
Methode angewendet .Ich habe dies mit dem Cmdlet VMware Get-VmQuestion gefunden:
Die Antwort, die es gab, ist eine, während
erzeugte keine Ausgabe (die richtige Antwort war 0, wie mit der
Measure
Methode erzeugt).Dies schien nur bei 0 und 1 der Fall zu sein. Alles über 1 war mit begrenzten Tests korrekt.
quelle