Как я читаю в руководстве пользователя PowerShell, одна из основных концепций PowerShell заключается в том, что команды принимают и возвращают объекты вместо текста. Так, например, запуск get-alias
возвращает мне несколько System.Management.Automation.AliasInfo
объектов:
PS Z: \> get-alias Определение имени CommandType ----------- ---- ---------- Alias% ForEach-Object Алиас? Where-Object Alias ac Add-Content Псевдоним asnp Add-PSSnapIn Alias cat Get-Content Alias cd Set-Location Alias chdir Set-Местоположение ...
Теперь, как я могу получить количество этих объектов?
powershell
scripting
ulidtko
источник
источник
$Counter = $(get-alias | measure).Count
поскольку он всегда возвращает значение 1 в случае, если есть только одно вхождение, как вы сказали.get-alias | measure | % { $_.Count }
measure
это сокращение отMeasure-Object
; и возвращает много других вещей - какAverage
,Sum
,Maximum
и т.д ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
чтобы избавиться от%
и{}
. Что легче написать и прочитать, для другого обсуждения.Если ответ @ jumbo таков :-), вы можете сделать это еще более кратко. Это просто возвращает
Count
свойство массива, возвращенного подвыражением antecedent:Пара моментов, на которые стоит обратить внимание:
Вы можете поместить произвольно сложное выражение вместо
Get-Alias
, например:Начальный знак at (@) необходим для надежного решения. Если ответ равен двум или более, вы получите эквивалентный ответ с или без @, но если ответ равен нулю или единице, вы не получите никакого вывода, если у вас нет знака @! (Это заставляет
Count
свойство существовать, заставляя вывод быть массивом.)2012.01.30 Обновление
Вышесказанное верно для PowerShell V2. Одна из новых функций PowerShell V3 заключается в том, что у вас есть
Count
свойство даже для синглетонов, поэтому знак «at» становится неважным для этого сценария.источник
Set-StrictMode -Version Latest
используется. Я только что столкнулся с этим сегодня (на 5.1) - что-то работало в интерактивном режиме, что не работало в функции. Я проследил это до функции, в которой есть Set-StrictMode; когда я установил строгий режим в интерактивном режиме, он тоже не работал.Set-StrictMode
, поэтому я должен был это заметить.if ($myObject.PSobject.Properties.Name -contains "count")
(из stackoverflow.com/questions/26997511/… ) перед попыткой проверить свойство count. Я ненавижу, что PoSH заставляет меня делать это, но Строгий Режим стоит того.Просто используйте скобки и «считать». Это относится к Powershell v3
источник
@($output).Count
не всегда дает правильные результаты. Я использовал($output | Measure).Count
метод.Я нашел это с помощью командлета VMware Get-VmQuestion:
Ответ, который он дал, один, тогда как
не вывел никаких результатов (правильный ответ был 0, как получено с помощью
Measure
метода).Казалось, что это только в случае с 0 и 1. Все, что выше 1, было правильным с ограниченным тестированием.
источник