Búsqueda de sitios web

PowerShell donde | Aprenda ¿Cómo funciona el comando Dónde-Objeto?


Introducción a PowerShell donde

El cmdlet Where-Object de PowerShell (Alias: dónde) selecciona o filtra las propiedades particulares del objeto en función de su valor que se le pasa mediante Pipeline, como filtrar el proceso particular con sus nombres o uso o filtrar el servicio. según su tipo de inicio, estado, etc. Este objeto Where toma la entrada de PowerShell Pipeline y la procesa y utiliza el operador de comparación junto con el valor de la propiedad y funciona con ScriptBlock o con una declaración de comparación.

Sintaxis

Sintaxis del comando Dónde-Objeto.

Sintaxis 1:

Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Comparision Operator]
[<CommonParameters>]

Aquí los operadores de comparación son,

EQ

GT

MATCH

CGT

CEQ

LT

CNE

CLT

GE

CGE

LE

CLE

Like

Clike

NotLike

CNo me gusta

Cmatch

NotMatch

CNotMatch

Contiene

CContains

NotContains

CNotContains

En

CIn

NotIn

CNotIn

Es

IsNot

No

Sintaxis 2:

Where-Object
[-InputObject <PSObject>]
[-FilterScript] <ScriptBlock>
[<CommonParameters>]

Parámetros comunes para ambas sintaxis.

Debug (db)

Fuera de la variable (ov)

ErrorAction (ea)

OutBuffer (ob)

ErrorVariable (ev)

Variable de canalización (pv)

InformationAction (infa)

Detallado (vb)

InformationVariable (iv)

Acción de advertencia (wa)

Variable de advertencia (wv)

¿Cómo funciona el comando Dónde-Objeto en PowerShell?

El cmdlet Where-Object en PowerShell toma la entrada de Pipeline y funciona en las propiedades del objeto de entrada. Los objetos de entrada pueden ser objetos que constan de métodos y propiedades o pueden ser una matriz. Una vez que usa el cmdlet donde-objeto, usa la propiedad del objeto para filtrar junto con el operador de comparación.

Hay dos formas de construir un comando Dónde-Objeto.

1. Bloque de secuencias de comandos

En este método, utilizamos el nombre de la propiedad, los operadores de comparación u operadores lógicos y el valor de la propiedad para filtrar los datos del objeto. Where-Object devuelve todos los objetos para los cuales una declaración de bloque de script en particular es verdadera.

Por ejemplo,

Get-Process | Where-Object {$_.Name -eq "Chrome"}

2. Declaración de comparación

Esta característica se introdujo en PowerShell 3.0 y antes de eso, solo existía un método de bloque de script. Este método utiliza el lenguaje natural para filtrar el objeto proporcionando el valor de la propiedad.

Por ejemplo,

Get-Process | Where-Object -Property "Name" -EQ -Value "Chrome"

Cuando solo se proporciona el nombre de la propiedad pero no el valor, trata el objeto Where como una expresión booleana. Por ejemplo,

('Hello','','PowerShell') | Where-Object Length

Algunos ejemplos más se verán en la sección de ejemplos.

También podemos usar el símbolo '?' en lugar del comando Dónde-Objeto. Por ejemplo,

Get-Service | ?{$_.StartType -eq 'Disabled'}

Los valores que proporcionamos en el comando Where-Object no distinguen entre mayúsculas y minúsculas, pero pueden hacerlo utilizando los pocos operadores que comienzan con qué 'C' (ceq, clike, Ccontains, etc.).

Ejemplos

Aquí están los siguientes ejemplos que se mencionan a continuación.

Ejemplo n.º 1: uso del operador -EQ.

En este ejemplo, Where-Object utiliza el operador -EQ para obtener el tipo de inicio del servicio en el estado deshabilitado.

Get-Service | where{$_.StartType -eq 'Disabled'}

O

Get-Service | Where-Object -Property Starttype -EQ -Value Disabled

Salida:

Ejemplo n.° 2: uso de múltiples operadores de comparación y un operador lógico.

Podemos combinar múltiples operadores de comparación y un operador lógico para filtrar el resultado con el comando Dónde-Objeto. Por ejemplo,

Get-Service | Where{($_.StartType -eq 'Manual') -and ($_.Status -eq 'Running')} | Select Name, Starttype, Status

Salida:

Ejemplo n.º 3: uso de caracteres comodín.

Podemos utilizar el carácter comodín con el operador Me gusta para obtener resultados similares. Por ejemplo,

Para obtener los nombres de los servicios que comienzan con 'P'.

Get-Service | where{$_.Name -like 'P*'}

Salida:

Nombre del servicio que termina en 'A'.

Get-Service | where{$_.Name -like '*A'}

Salida:

Nombre del servicio que contiene "Registros".

Get-Service | where{$_.Name -like '*Log*'}

Salida:

Ejemplo n.º 4: Sensibilidad entre mayúsculas y minúsculas.

PowerShell no distingue entre mayúsculas y minúsculas y sus comandos, pero se puede hacer que distinga entre mayúsculas y minúsculas utilizando algunos operadores de comparación y comienzan con la "C".

Get-Service | where{$_.Name -ceq 'Netlogon'}

El comando anterior proporciona el resultado, pero debido a que Netlogon coincide exactamente con el nombre del servicio, el siguiente comando no produce resultado debido a que el nombre distingue entre mayúsculas y minúsculas con el operador -CEQ.

Get-Service | where{$_.Name -ceq 'netlogon'}

Salida:

Ejemplo #5: Filtrado de la matriz con Longitud.

Considere que tenemos la siguiente matriz y para filtrar la salida no nula, podemos usar el siguiente comando.

"John","","Alex","" | Where-Object Length -gt 0

Salida:

Del mismo modo, también puedes filtrar los archivos.

Ejemplo n.º 6: uso de operadores (mayor, menor) que.

También podemos utilizar algunos operadores para la comparación de longitudes. Por ejemplo, el siguiente comando obtendrá todos los procesos cuyo identificador sea mayor que 1000 y, en el siguiente ejemplo, sea menor que 5000.

Get-Process | ?{$_.Handles -ge 1000}
Get-Process | ?{$_.Handles -lt 1000}

De manera similar, puede utilizar los operadores -Gt (mayor que), -le (menor que igual a) para comparar propiedades de enteros.

Ejemplo n.º 7: uso de la propiedad Verdadero o Falso.

En los ejemplos anteriores, hemos utilizado el comando Where-Object de PowerShell con propiedades, pero las propiedades con salida Verdadero o Falso se pueden usar directamente en el comando donde. Veremos ejemplos basados en comandos y basados en scripblock.

Get-Process | where Responding

El ejemplo anterior obtendrá todos los procesos que responden y se puede escribir el mismo comando con scripblock a continuación.

Get-Process | Where-Object{$_.Responding -eq $true}

Por no responder al proceso,

Get-Process | where -Property Responding -NE $true

Con el bloque de guión,

Get-Process | where{!($_.Responding -eq $true)}

Salida:

Ejemplo 8: Objeto Dónde con operador -Contiene.

Para obtener los objetos o un valor de matriz podemos usar el operador Contiene. Por ejemplo, el siguiente comando buscará desde la salida del proceso utilizando el operador -Contains.

Get-Process | where{$_.Name -contains "Chrome"}

Para filtrar con contenido que distinga entre mayúsculas y minúsculas, utilice el operador -CContains.

Ejemplo #8 - Uso del objeto Where sin propiedad de objeto.

Un objeto como una matriz no tiene el nombre de Propiedad, en ese caso, podemos usar $_ para filtrar el resultado con Where-Object sin especificar el nombre de la propiedad.

"Hello","PowerShell","Azure","Office365" | where{$_ -eq 'PowerShell'}

Salida:

Conclusión

Where-Object en PowerShell se considera la columna vertebral de los resultados de PowerShell porque puede filtrar miles de resultados de archivos u objetos en unos pocos segundos o minutos y ayuda a Powershell a procesar más rápido el resultado. Es muy útil para el procesamiento de datos y el filtrado del contenido.

Artículos relacionados