Как считать объекты в PowerShell?

Как я читаю в руководстве пользователя PowerShell, одна из основных концепций PowerShell заключается в том, что команды принимают и возвращают объекты вместо текста. Например, выполнение get-alias возвращает мне число System.Management.Automation.AliasInfo объекты:

PS Z: \> получить псевдоним

Определение имени CommandType
----------- ---- ----------
Alias% ForEach-Object
Алиас? Where-Object
Alias ​​ac Add-Content
Псевдоним asnp Add-PSSnapIn
Alias ​​cat Get-Content
Alias ​​cd Set-Location
Alias ​​chdir Set-Местоположение
...

Теперь, как узнать количество этих объектов?

104 голоса | спросил ulidtko 17 J000000Tuesday12 2012, 19:52:28

4 ответа


0

Это даст вам счет:

get-alias | measure

Вы можете работать с результатом как с объектом:

$m = get-alias | measure
$m.Count

И если вы хотите, чтобы псевдонимы были также в некоторой переменной, вы можете использовать Tee-Object:

$m = get-alias | tee -Variable aliases | measure
$m.Count
$aliases

Дополнительная информация о командлете Measure-Object приведена в Technet .

Не путайте его с командлетом Measure-Command, предназначенным для измерения времени. (снова на Technet )

ответил jumbo 17 J000000Tuesday12 2012, 19:54:29
0

Если ответ @ jumbo таков :-), вы можете сделать это еще более кратко. Это просто возвращает свойство Count массива, возвращенного предшествующим подвыражением:

@(Get-Alias).Count

Пара замечаний:

  1. Вы можете поместить произвольно сложное выражение вместо Get-Alias, например:

    @(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count
    
  2. Начальный знак at (@) является необходимым для надежного решения. Пока ответ равен двум или более, вы получите эквивалентный ответ с или без @, но если ответ равен нулю или единице, вы получите нет , если у вас нет знака @! (Это заставляет свойство Count существовать, заставляя вывод быть массивом.)

2012.01.30 Обновление

Вышесказанное относится к PowerShell V2. Одна из новых возможностей PowerShell V3 заключается в том, что у вас есть свойство Count даже для одиночных игр, поэтому знак at становится неважным для этого. сценарий.

ответил Michael Sorens 19 J000000Thursday12 2012, 00:57:10
0

Просто используйте круглые скобки и 'count'. Это относится к Powershell v3

(get-alias).count
ответил prabhakaran 26 MarpmWed, 26 Mar 2014 15:17:54 +04002014-03-26T15:17:54+04:0003 2014, 15:17:54
0

@($output).Count не всегда дает правильные результаты. Я использовал метод ($output | Measure).Count.

Я нашел это с помощью командлета VMware Get-VmQuestion:

$output = Get-VmQuestion -VM vm1
@($output).Count

Ответ, который он дал, один, тогда как

$output

не выдал ничего (правильный ответ был 0, как было получено с помощью метода Measure).

Это, похоже, имеет место только с 0 и 1. Все, что выше 1, было правильным с ограниченным тестированием.

ответил bchris999 21 J000000Tuesday15 2015, 17:44:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132