Búsqueda de sitios web

El objeto donde PowerShell contiene ejemplos


El cmdlet Where-Object de PowerShell le permite filtrar objetos según sus propiedades. En este tutorial de PowerShell, nos centraremos en el operador Contiene dentro del cmdlet Where-Object y en cómo puede usarlo. También le mostraré ejemplos de PowerShell Where-Object contiene.

En PowerShell, el cmdlet Where-Object se utiliza a menudo para filtrar objetos según sus propiedades. Para comprobar si una propiedad que es una colección (como una matriz) contiene un valor específico, utiliza el operador -contains. Por ejemplo, para encontrar todos los procesos que tienen un determinado módulo cargado, puede usar Get-Process | Donde-Objeto { $_.Modules -contiene 'NombredelMódulo' }.

El objeto donde PowerShell contiene

El operador Contiene se utiliza con PowerShell Where-Object para buscar objetos en una colección que incluyan un valor de propiedad particular. Es importante tener en cuenta que Contains es diferente del operador -like , que admite comparaciones con comodines, o -match, que utiliza expresiones regulares.

Un caso de uso común para Contains es cuando se trata de una colección o una matriz de valores dentro de una única propiedad de un objeto. Digamos que desea encontrar todos los procesos que tienen un determinado módulo cargado. Podrías hacer algo como esto:

Get-Process | Where-Object { $_.Modules -Contains 'ModuleName' }

En este ejemplo, Módulos es una propiedad que contiene una colección de todos los módulos que cada proceso ha cargado. El operador Contains comprueba si 'ModuleName' está en esa colección.

Aquí hay un ejemplo:

Imagine que tiene un directorio de archivos y desea buscar todos los archivos que contienen una cadena específica en su nombre. Puede utilizar un filtro que contenga en Where-Object.

Get-ChildItem | Where-Object { $_.Name -Contains 'Report' }

Este comando recupera todos los elementos del directorio actual y los filtra en función de si su nombre contiene la cadena "Informe".

Al usar Contains en Where-Object en PowerShell, recuerde que distingue entre mayúsculas y minúsculas y busca una coincidencia exacta dentro de una colección. Si necesita una búsqueda que no distinga entre mayúsculas y minúsculas o una coincidencia parcial, puede considerar usar -like con comodines o -match con una expresión regular.

También vale la pena señalar que Contains no es lo mismo que In, que verifica si un valor único está en una colección. La sintaxis y los casos de uso son diferentes:

'ServiceName' -In (Get-Service).Name

Esto verifica si 'ServiceName' está en la colección de nombres de todos los servicios.

El objeto donde de PowerShell contiene una cadena

Al trabajar con PowerShell, es posible que necesite filtrar objetos en función de si una propiedad de cadena contiene una subcadena particular. Aquí es donde entra en juego el cmdlet Where-Object , que le permite examinar una colección de objetos y seleccionar aquellos que coinciden con ciertos criterios.

Sin embargo, existe una idea errónea común cuando se trata de utilizar el término "contiene" con Where-Object. En PowerShell, el operador -contains se utiliza para verificar la presencia de un valor dentro de una colección (matriz), no para verificar subcadenas dentro de una propiedad de cadena. Para comprobar si una propiedad de cadena de un objeto contiene una subcadena particular, normalmente usaría el operador -like con caracteres comodín, o el operador -match que usa expresiones regulares.

A continuación se muestra un ejemplo del uso de Where-Object con el operador -like para buscar una cadena dentro de otra cadena:

Get-Process | Where-Object { $_.ProcessName -like '*notepad*' }

En este ejemplo, estamos filtrando la salida de Get-Process para mostrar solo los procesos donde la propiedad ProcessName contiene la subcadena "notepad". Los asteriscos (*) son caracteres comodín que coinciden con cero o más caracteres a cada lado del “bloc de notas”.

Puede ver el resultado en la siguiente captura de pantalla:

Si necesita realizar una búsqueda de subcadenas que no distinga entre mayúsculas y minúsculas, -like y -match no distinguen entre mayúsculas y minúsculas de forma inherente en PowerShell. Sin embargo, puede utilizar los operadores -ccontains, -clike o -cmatch para realizar comparaciones que distingan entre mayúsculas y minúsculas.

Por ejemplo, usando -match para buscar una cadena dentro de otra cadena:

Get-Service | Where-Object { $_.DisplayName -match 'remote' }

Esto filtraría los servicios a aquellos que tienen "remoto" en su DisplayName.

Es importante tener en cuenta que -match utiliza expresiones regulares, que son potentes herramientas de coincidencia de patrones que van más allá de simples búsquedas de subcadenas. Esto puede resultar muy útil, pero también requiere cierta comprensión de la sintaxis de las expresiones regulares para utilizarlo de forma eficaz.

En resumen, cuando desee filtrar objetos en PowerShell en función de si una propiedad de cadena contiene una subcadena específica, debe usar -like o -match, no - contiene. El operador -contains está diseñado para usarse con colecciones, no con cadenas.

PowerShell donde el objeto no contiene

En PowerShell, cuando desee filtrar objetos donde una propiedad no contiene un valor específico, podría pensar en utilizar un operador "no contiene". Sin embargo, PowerShell no tiene un operador -notcontains para cadenas. En su lugar, debe utilizar el operador -notlike o -notmatch para negar una coincidencia de cadena, los cuales se pueden usar junto con el Where-Object cmdlet.

Usando -notlike

El operador -notlike se utiliza con Where-Object para excluir objetos donde una propiedad de cadena no coincide con un patrón específico, que puede incluir comodines. He aquí un ejemplo:

Get-Service | Where-Object { $_.DisplayName -notlike '*SQL*' }

Este comando devolverá todos los servicios donde DisplayName no incluye la subcadena "SQL".

Usando -notmatch

Alternativamente, -notmatch usa expresiones regulares para la coincidencia de patrones y puede usarse para realizar negaciones más complejas:

Get-Process | Where-Object { $_.ProcessName -notmatch '^conhost$' }

El comando anterior devolverá una lista de procesos en los que ProcessName no coincide exactamente con "conhost". ^ y $ son anclajes de expresión regular para el inicio y el final de la cadena, respectivamente.

Tratar con colecciones

Si está tratando con una propiedad que es una colección (matriz) y desea excluir objetos donde la colección contiene un valor determinado, utilice -notcontains. Este es el uso correcto de -notcontains en PowerShell:

$myArray = 'apple', 'banana', 'cherry'
$myArray -notcontains 'orange' # This returns True because 'orange' is not in the array

Sin embargo, al filtrar con Where-Object, harías algo como esto:

$myObjects | Where-Object { $_.SomeCollectionProperty -notcontains 'SomeValue' }

En este ejemplo, $myObjects es una colección de objetos, cada uno con una propiedad SomeCollectionProperty que es en sí misma una colección. El operador -notcontains se utiliza para filtrar los objetos donde SomeCollectionProperty no contiene "SomeValue".

Cuando desee filtrar objetos en función de la ausencia de una subcadena dentro de una propiedad de cadena, debe usar -notlike o -notmatch con Where-Object en PowerShell. Cuando se trata de una propiedad de colección y desea excluir objetos donde la colección contiene un valor específico, debe utilizar -notcontains.

PowerShell donde el objeto no contiene

En PowerShell, cuando necesita filtrar objetos en función de la ausencia de un determinado valor dentro de una propiedad que es una colección (como una matriz), puede usar el operador -notcontains con el Dónde -Objeto cmdlet en PowerShell. Sin embargo, si desea comprobar si una propiedad de cadena no contiene una subcadena específica, deberá utilizar los operadores -notlike o -notmatch en su lugar, como -notcontains no está diseñado para comprobaciones de contención de cadenas.

Usando -notlike para cadenas

El operador -notlike se utiliza en comparaciones de cadenas en las que desea devolver objetos que no coinciden con un patrón específico. Este patrón puede incluir comodines, como el asterisco (*), que representa cualquier número de caracteres. He aquí un ejemplo:

Get-ChildItem | Where-Object { $_.Name -notlike '*temp*' }

Este comando devolverá todos los elementos donde la propiedad Name no incluya la subcadena "temp".

Usando -notmatch para cadenas

El operador -notmatch utiliza expresiones regulares para la coincidencia de patrones y se utiliza para excluir objetos donde una propiedad de cadena coincide con un patrón de expresión regular específico. He aquí un ejemplo:

Get-Process | Where-Object { $_.ProcessName -notmatch 'chrome' }

Este comando devolverá todos los procesos donde ProcessName no contiene la subcadena "chrome".

Usando -notcontains para colecciones

Cuando se trata de propiedades que son colecciones, el operador -notcontains es apropiado. Comprueba si una colección no contiene un valor específico. Por ejemplo:

$fruitList = 'apple', 'banana', 'cherry'
$fruitList -notcontains 'grape' # This returns True because 'grape' is not in the list

En el contexto de Where-Object, puedes usar -notcontains para filtrar objetos donde una propiedad de tipo colección no contiene un valor determinado:

$myObjects | Where-Object { $_.FruitList -notcontains 'grape' }

En este ejemplo, $myObjects podría ser una colección de objetos, cada uno con una propiedad FruitList que es una colección de cadenas que representan frutas. El operador -notcontains se utiliza para devolver solo los objetos donde FruitList no contiene la cadena "uva".

Cuando desee filtrar objetos en PowerShell donde una propiedad de cadena no contiene una subcadena determinada, debe usar -notlike o -notmatch. Cuando necesite excluir objetos debido a la ausencia de un valor dentro de una propiedad de colección, utilice -notcontains.

El objeto donde PowerShell contiene ejemplos

Veamos dos ejemplos relacionados con PowerShell donde contiene el objeto.

Ejemplo 1: Filtrar una matriz con -contiene

Digamos que tienes una matriz de números y quieres saber si la matriz contiene un número específico:

$numbers = 1, 2, 3, 4, 5
$numbers -contains 3

Esto devolverá True porque el número 3 está en la matriz $numbers.

Ejemplo 2: Filtrar objetos con una propiedad que contiene un valor determinado

Si tiene un objeto personalizado con una propiedad que es una matriz y desea filtrar esos objetos en función de si la matriz contiene un valor determinado, usaría -contains en un Dónde- Objeto bloque como este:

$myObjects | Where-Object { $_.PropertyArray -contains 'Value' }

En este ejemplo, $myObjects podría ser una colección de objetos y PropertyArray es una propiedad de esos objetos que es una matriz. El comando filtra objetos donde PropertyArray contiene la cadena "Valor".

Conclusión

El cmdlet Where-Object con el operador Contains es muy útil en PowerShell para filtrar objetos según el contenido de sus propiedades. Además, discutimos los siguientes temas:

  • El objeto donde PowerShell contiene
  • El objeto donde de PowerShell contiene una cadena
  • PowerShell donde el objeto no contiene
  • PowerShell donde el objeto no contiene
  • El objeto donde PowerShell contiene ejemplos

Artículos relacionados