Jak czytam w podręczniku użytkownika programu PowerShell, jedną z podstawowych koncepcji programu PowerShell jest to, że polecenia akceptują i zwracają obiekty zamiast tekstu. Na przykład uruchomienie get-alias
zwraca mi kilka System.Management.Automation.AliasInfo
obiektów:
PS Z: \> get-alias Definicja nazwy typu polecenia ----------- ---- ---------- Alias% ForEach-Object Alias ? Where-Object Alias ac Add-Content Alias asnp Add-PSSnapIn Alias cat Get-Content Alias cd Set-Location Alias chdir Set-Location ...
Teraz, jak mam policzyć te obiekty?
powershell
scripting
ulidtko
źródło
źródło
$Counter = $(get-alias | measure).Count
ponieważ zawsze zwraca wartość 1 na wypadek, gdyby było tylko jedno wystąpienie, tak jak powiedziałeś.get-alias | measure | % { $_.Count }
measure
jest skrótem odMeasure-Object
; i zwraca wiele innych rzeczy - jakAverage
,Sum
,Maximum
itp ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
pozbyć się%
i{}
. To, co łatwiej jest pisać i czytać, służy do innej dyskusji.Krótka jak odpowiedź @ jumbo brzmi :-), możesz to zrobić jeszcze bardziej zwięźle. To po prostu zwraca
Count
właściwość tablicy zwróconej przez poprzednik podwyrażenie:Kilka punktów do zapamiętania:
Możesz wstawić dowolnie złożone wyrażenie
Get-Alias
, na przykład:Początkowy znak at (@) to niezbędny do niezawodnego rozwiązania. Dopóki odpowiedź wynosi dwa lub więcej, otrzymasz równoważną odpowiedź z lub bez znaku @, ale gdy odpowiedź będzie wynosić zero lub jeden, nie otrzymasz żadnego wyniku, chyba że masz znak @! (Wymusza istnienie
Count
właściwości przez wymuszenie, aby dane wyjściowe były tablicą).Aktualizacja 2012.01.30
Powyższe dotyczy PowerShell V2. Jedną z nowych funkcji programu PowerShell V3 jest to, że masz
Count
właściwość nawet dla pojedynczych elementów, więc znak at staje się nieistotny w tym scenariuszu.źródło
Set-StrictMode -Version Latest
jest używany. Właśnie spotkałem się z tym dzisiaj (na 5.1) - coś działało interaktywnie, co nie działało w funkcji. Wyśledziłem to do funkcji, w której znajduje się Set-StrictMode; kiedy ustawiłem interaktywnie tryb ścisły, to też nie działało.Set-StrictMode
, więc powinienem był to zauważyć.if ($myObject.PSobject.Properties.Name -contains "count")
(ze stackoverflow.com/questions/26997511/… ) przed próbą przetestowania właściwości count. Nienawidzę tego, że PoSH zmusza mnie do tego, ale tryb ścisły jest tego wart.Po prostu użyj nawiasów i „liczyć”. Dotyczy to Powershell v3
źródło
@($output).Count
nie zawsze daje prawidłowe wyniki. Użyłem($output | Measure).Count
metody.Znalazłem to za pomocą polecenia cmdlet VMware Get-VmQuestion:
Odpowiedź, jakiej udzielił, jest jedna, a tymczasem
nie wygenerowało żadnego wyniku (poprawna odpowiedź to 0, zgodnie z otrzymaną
Measure
metodą).Wydawało się, że tak jest tylko w przypadku 0 i 1. Wszystko powyżej 1 było poprawne przy ograniczonych testach.
źródło