Enquanto estou lendo o guia do usuário do PowerShell, um dos principais conceitos do PowerShell é que os comandos aceitam e retornam objetos em vez de texto. Por exemplo, a execução get-alias
me devolve vários System.Management.Automation.AliasInfo
objetos:
PS Z: \> get-alias Nome do CommandType Definição ----------- ---- ---------- Alias% ForEach-Object Alias? Where-Object Alias ac Adicionar conteúdo Alias asnp Add-PSSnapIn Alias cat Get-Content Alias cd Set-Location Alias chdir Set-Location ...
Agora, como obtenho a contagem desses objetos?
powershell
scripting
ulidtko
fonte
fonte
$Counter = $(get-alias | measure).Count
como sempre retorna o valor 1, caso haja apenas uma ocorrência, exatamente como você disse.get-alias | measure | % { $_.Count }
measure
é a abreviação deMeasure-Object
; e retorna um monte de outras coisas - comoAverage
,Sum
,Maximum
, etc ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
para se livrar de%
e{}
. O que é mais fácil escrever e ler é para outra discussão.Tão curta quanto a resposta do @ jumbo é :-) você pode fazê-lo de maneira ainda mais concisa. Isso apenas retorna a
Count
propriedade da matriz retornada pela sub-expressão antecedente:Alguns pontos a serem observados:
Você pode colocar uma expressão arbitrariamente complexa no lugar de
Get-Alias
, por exemplo:O arroba inicial (@) é necessário para uma solução robusta. Enquanto a resposta é dois ou mais você vai obter uma resposta equivalente com ou sem a @, mas quando a resposta é zero ou um que você vai ter nenhuma saída a menos que você tem o sinal @! (Força a
Count
propriedade a existir forçando a saída a ser uma matriz.)01.01.2012
O acima é verdade para o PowerShell V2. Um dos novos recursos do PowerShell V3 é que você possui uma
Count
propriedade mesmo para singletons, portanto, o sinal de arroba se torna sem importância para esse cenário.fonte
Set-StrictMode -Version Latest
for usado. Eu acabei de encontrar isso hoje (em 5.1) - algo funcionou interativamente que não funcionou em uma função. Eu o localizei até a função Set-StrictMode; quando eu defini o modo estrito interativamente, também não funcionou.Set-StrictMode
também, então eu deveria ter percebido isso.if ($myObject.PSobject.Properties.Name -contains "count")
(de stackoverflow.com/questions/26997511/… ) antes de tentar testar a propriedade count. Odeio que o PoSH me faça fazer isso, mas o Modo Estrito vale a pena.Basta usar parênteses e 'contar'. Isso se aplica ao Powershell v3
fonte
@($output).Count
nem sempre produz resultados corretos. Eu usei o($output | Measure).Count
métodoEncontrei isso com o cmdlet VMware Get-VmQuestion:
A resposta que deu é uma, enquanto
não produziu saída (a resposta correta foi 0, conforme produzido com o
Measure
método).Esse parecia ser o caso apenas de 0 e 1. Qualquer coisa acima de 1 estava correta com testes limitados.
fonte