Articles

PowerShell: obtener propiedades de objetos en matrices

Posted by admin

en PowerShell, a menudo Corro comandos que devuelven matrices que necesito filtrar. Una vez que he filtrado el objeto que estoy buscando, necesito leer una propiedad de ese objeto. Hay algunas maneras de hacer esto. Aquí hay tres.

estos también son buenos ejemplos si es nuevo en PowerShell e intenta cambiar de la mentalidad de Linux de analizar cadenas a la mentalidad de PowerShell de manipular objetos.,

para estos ejemplos usaremos un array filtrado desde Get-Process:

Select-Object lee propiedades de objetos. Podemos canalizar el objeto que nos hemos encontrado:

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

En este caso, Where-Object devuelve un objeto y Select-Object lee la propiedad fuera de ella, pero esto todavía funciona si hemos partido de múltiples procesos. A continuación, Where-Object devuelve un array que se descomprime mediante la canalización de PowerShell y se envía a Select-Object uno a la vez.,

esto es básicamente un filtro de propiedades. Todavía devuelve una matriz de objetos de proceso, pero esos objetos solo tienen la propiedad que seleccionó. Podemos ver esto con Get-Member:

cuatro métodos, pero solo una propiedad.

Método 2: subexpresión

Si capturamos la salida de nuestro comando match en una subexpresión, podemos acceder a las propiedades del objeto usando Notación punteada como lo haríamos con cualquier variable:

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

esto también funciona si nuestro match devuelve varios objetos., La subexpresión contendrá una matriz y PowerShell obtendrá automáticamente la propiedad cpu de cada objeto de esa matriz.

a diferencia del filtro de Select-Object, esto no devuelve objetos de proceso con una propiedad de cpu. En su lugar, devuelve un doble (número) con el valor real:

Método 3: bucle

como cualquier salida, podemos canalizar nuestra coincidencia en un bucle ForEach-Object y usar la variable $_ para acceder a las propiedades de cada elemento que el bucle ve:

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

el bucle, por supuesto, funcionará en varios objetos.,

al igual que la subexpresión, devuelve el valor real en lugar de un objeto con una propiedad.

Feliz automatización!

Adam

Necesita más que este artículo? Estoy disponible para consultar.

También puede consultar estos artículos relacionados:

  • Cómo usar Out-String en PowerShell: no
  • Script DSC de PowerShell sin cabeza
  • PowerShell Install-Module: Use Install-Package en su lugar

Leave A Comment