em PowerShell, muitas vezes executo comandos que devolvem arrays que preciso filtrar. Depois de filtrar o objecto que procuro, preciso de ler uma propriedade desse objecto. Há algumas maneiras de fazer isto. Aqui estão três.
estes são também bons exemplos se você é novo no PowerShell e tentar mudar da mentalidade do Linux de processar strings para a mentalidade PowerShell de manipular objetos.,
para estes exemplos estaremos usando um array filtrado de Get-Process
:
Select-Object
lê propriedades de objetos. Podemos pipe é o objeto que encontrei:
Get-Process | Where-Object ProcessName -Match "update" | Select-Object cpu CPU ---380.761615
neste caso, Where-Object
retorna um objeto e Select-Object
lê a propriedade fora dele, mas isso ainda funciona se nós corresponder a vários processos. Então, Where-Object
devolve um array que é desempacotado pelo gasoduto PowerShell e enviado para Select-Object
um de cada vez.,
isto é basicamente um filtro de propriedades. Ele ainda retorna uma matriz de objetos de processo, mas esses objetos só têm a única propriedade que você selecionou. Podemos ver isso com Get-Member
:
quatro métodos, mas apenas uma propriedade.
Método 2: Subexpressão
Se a gente captura a saída de nossas correspondência de comando em uma subexpressão, podemos acessar as propriedades do objeto usando notação, como faríamos com qualquer variável:
$(Get-Process | Where-Object ProcessName -Match "update").cpu380.761615
Isso também funciona se a nossa correspondência devolvida vários objetos., A subexpressão irá conter um array e PowerShell irá obter automaticamente a propriedade cpu de cada objeto nesse array.
Ao contrário do filtro de Select-Object
, isto não devolve objectos com uma propriedade cpu. Em vez disso, ele retorna um double (número) com o valor real:
Método 3: Loop
Como qualquer saída, pode canalizar o nosso jogo em um ForEach-Object
loop e usar o $_
variável para acessar as propriedades de cada item o loop vê:
Get-Process | Where-Object ProcessName -Match "update" | ForEach-Object {$_.cpu}381.625785
O loop de trabalho de curso em vários objectos.,
tal como a sub-expressão, isto devolve o valor actual em vez de um objecto com uma propriedade.Happy automating!Adam precisa de mais do que apenas este artigo? Estou disponível para consultas.
Poderá também querer verificar estes artigos relacionados:
- Como Usar O ‘Out-String’ em PowerShell: Don’t
- Script DSC sem cabeça
- PowerShell Install-Module: Use Install-Package Instead