Las matrices le permiten almacenar múltiples valores en una variable. De esta manera, puede recorrer fácilmente cada valor y procesarlo en su secuencia de comandos. Pero a veces es necesario comprobar si la matriz de PowerShell contiene un valor específico.
Para verificar si existe un valor en una matriz, podemos usar el-Contains
operador en PowerShell. Esto devolverá verdadero si el valor existe. Pero también hay otras opciones.
En este artículo, le mostraré cómo puede comprobar si unLa matriz de PowerShell contieneun valor específico y explicar los diferentes métodos.
La matriz de PowerShell contiene
La forma recomendada de comprobar si una matriz contiene un valor específico es utilizando el-contains
operador o el.Contains()
método en PowerShell. Aunque ambos parecen similares, existen algunas diferencias importantes entre los dos.
Primero, echemos un vistazo rápido a cómo usar el-contains
operador. Para comprobar simplemente si una cadena está en una matriz, puede hacer lo siguiente:
$array = @('apple', 'banana', 'cherry') if ($array -contains 'banana') { Write-Host "Array contains banana" }else{ Write-Host "Banana not found in the array" }
El método anterior simplemente verificará si la cadena existe en la matriz. La comparación no distingue entre mayúsculas y minúsculas y el operador se detendrá cuando encuentre los resultados. Entonces, cuando un elemento, una fruta en el ejemplo anterior, aparece varias veces en la matriz, seguirá devolviendo Verdadero o Falso.
Entonces, hay un par de opciones más cuando se trata de verificar si un valor aparece en una matriz. además del.Contiene()método, también podemos usar:
- -en operador– comprueba si un valor está en una matriz, solo otra forma de escribirlo.
- -ccontiene operador– comparación que distingue entre mayúsculas y minúsculas
- -eq– También puede comprobar si una matriz contiene un valor específico
- Donde-Objeto– Le permite hacer comparaciones más complejas
Asegúrate de leer elasí como si quieres saber más sobre las diferentes opciones.
Contiene operador vs contiene método
Por eso primero quiero explicar la diferencia entre el operador contiene y el método contiene. Porque se parecen mucho, pero hay más.
El método Contiene, escrito.contains()
, es un método del marco .NET subyacente, mientras que el operador es específico de PowerShell. Ahora el método .NET es más rápido, por lo que cuando necesita buscar un valor en una matriz grande, existe un beneficio real.
Otra diferencia importante entre los dos es que el método contiene distingue entre mayúsculas y minúsculas de forma predeterminada, mientras que el operador no:
$array = @('apple', 'banana', 'cherry', 'banana') $array -contains 'Banana' # Returns true $array.Contains('Banana') # Returns false
Contiene distinción entre mayúsculas y minúsculas
Como se mencionó, el operador contiene distingue entre mayúsculas y minúsculas, lo que a menudo está perfectamente bien. Pero cuando también puedes hacer una coincidencia exacta del valor del caso, usando el-ccontains
operador (tenga en cuenta la doble c).
$array = @('apple', 'banana', 'cherry', 'banana') # Case sensitive comparison $array -ccontains 'Banana' # Returns false

Matriz no contiene
En lugar de verificar si una matriz contiene un valor específico, también podemos verificar si una matriz no contiene un valor específico. Para ello podemos utilizar el-notcontains
operador. El operador devolverá Verdadero si el valor no aparece en la matriz.
Por ejemplo, tenemos una lista de usuarios que han completado una capacitación en seguridad y queremos verificar si un usuario en particular tienenoya lo he completado. En este caso,-notcontains
es una opción más lógica de usar:
# List of users $completedTraining = @('John', 'Alice', 'Robert', 'Sarah') # Check if the user has not completed the training if ($completedTraining -notcontains 'Jane'){ Write-Host "Jane didn't completed the training" }
Usando el operador -In
El-in
El operador es el mismo que el operador contiene, solo que al revés. También devuelve verdadero cuando el valor está en la matriz, la única diferencia es que colocas la matriz a la derecha del operador, en lugar de a la izquierda.
Debe utilizar el operador -in cuando sea más intuitivo y conciso para la situación. Por ejemplo, si queremos verificar si un usuario es miembro de un grupo de administración, entonces tiene más sentido verificar si "Jane" está en el grupo de administración que verificar si el grupo de administración contiene "Jane":
# List of admin users $adminUsers = @('John', 'Alice', 'Robert') # Using the -in operator if ('Alice' -in $adminUsers) { Write-Output "Alice is an admin." }
La clave aquí es hacer que su código sea más fácil de leer y comprender. También puedes utilizar el-notin
operador, que comprueba si un valor no está en la matriz.
Operador igual
Quizás no lo esperes, pero también podemos usar el operador -eq para verificar si una matriz contiene un valor específico en PowerShell. La gran diferencia con el-contains
operador, sin embargo, el operador igual no devuelve verdadero o falso, pero devuelve el valor.
Y, lo que es más importante, no deja de buscar el valor cuando lo encuentra. Esto significa que también podemos contar o verificar si un valor aparece varias veces en una matriz:
$array = @('apple', 'banana', 'cherry', 'banana') $result = $array -eq "banana" if ($result) { Write-Host "Banana is listed $($result.Length) time(s) in the array" } # Result Banana is listed 2 time(s) in the array
Usando el objeto Where
La última opción que quiero mostrarte es laWhere-Object
Método para comprobar si una matriz contiene un valor específico. Este método se utiliza principalmente cuando tiene una serie de objetos o necesita realizar otras comparaciones complejas.
Por ejemplo, tenemos una matriz con objetos de usuario y queremos verificar si la matriz contiene un usuario específico:
$users = @( [PSCustomObject]@{ Name = 'John'; Age = 30 }, [PSCustomObject]@{ Name = 'Jane'; Age = 25 }, [PSCustomObject]@{ Name = 'Alice'; Age = 28 } ) $result = $users | Where-Object { $_.Name -contains 'Jane'}
Concluyendo
La forma más común de verificar si una matriz contiene un valor específico es usando el-contains
operador. Sin embargo, tenga en cuenta que esto distingue entre mayúsculas y minúsculas, mientras que el.contains()
El método distingue entre mayúsculas y minúsculas.
Intente utilizar el operador apropiado para la situación; esto hará que su código sea más fácil de leer y comprender.
Espero que te haya gustado este artículo, si tienes alguna pregunta, deja un comentario a continuación.