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 LengthAlgunos 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 DisabledSalida:
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, StatusSalida:
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 0Salida:
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 RespondingEl 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 $trueCon 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.










