Articles

PowerShell: Ottenere proprietà dagli oggetti in Array

Posted by admin

In PowerShell, eseguo spesso comandi che restituiscono array che ho bisogno di filtrare. Una volta che ho filtrato l’oggetto che sto cercando, ho bisogno di leggere una proprietà da quell’oggetto. Ci sono alcuni modi per farlo. Eccone tre.

Questi sono anche buoni esempi se sei nuovo a PowerShell e stai cercando di passare dalla mentalità Linux di analizzare le stringhe alla mentalità PowerShell di manipolare gli oggetti.,

Per questi esempi useremo un array filtrato da Get-Process:

Select-Object legge le proprietà dagli oggetti. Possiamo pipe l’oggetto che abbiamo trovato:

Get-Process | Where-Object ProcessName -Match "update" | Select-Object cpu CPU ---380.761615

In questo caso, Where-Objectrestituisce un oggetto e Select-Object legge la proprietà fuori di esso, ma questo funziona ancora se abbiniamo più processi. Quindi,Where-Object restituisce un array che viene decompresso dalla pipeline di PowerShell e inviato aSelect-Object uno alla volta.,

Questo è fondamentalmente un filtro di proprietà. Restituisce ancora un array di oggetti di processo, ma tali oggetti hanno solo la proprietà selezionata. Possiamo vederlo conGet-Member:

Quattro metodi, ma solo una proprietà.

Metodo 2: Subexpression

Se catturiamo l’output del nostro comando match in una subexpression, possiamo accedere alle proprietà dell’oggetto usando la notazione punteggiata come faremmo con qualsiasi variabile:

$(Get-Process | Where-Object ProcessName -Match "update").cpu380.761615

Questo funziona anche se la nostra partita ha restituito più oggetti., La sottoespressione conterrà un array e PowerShell otterrà automaticamente la proprietà cpu da ciascun oggetto in tale array.

A differenza del filtro diSelect-Object, questo non restituisce oggetti di processo con una proprietà cpu. Invece, restituisce un double (numero) valore effettivo:

il Metodo 3: Loop

Come ogni uscita, possiamo tubo la partita in un ForEach-Object loop e utilizzare il $_ variabile per accedere alle proprietà di ciascun elemento, loop vede:

Get-Process | Where-Object ProcessName -Match "update" | ForEach-Object {$_.cpu}381.625785

Il ciclo di lavoro corso su più oggetti.,

Proprio come la sottoespressione, questo restituisce il valore effettivo invece di un oggetto con una proprietà.

Automazione felice!

Adam

Hai bisogno di più di questo articolo? Sono disponibile a consultarmi.

Si potrebbe anche voler controllare questi articoli correlati:

  • Come utilizzare Out-String in PowerShell: Non
  • Senza testa PowerShell DSC Script
  • PowerShell Install-Module: Utilizzare Install-Package Invece

Leave A Comment