Cuando la gente está explorando los operadores disponibles en PowerShell (help about_comparison_operators), a menudo se encuentran con dos operadores similares, pero drásticamente diferentes, y se confunden con ellos.
A menudo veo a alguien probar esto:
if ($string -contains '*win*') { }
Están tratando de ver si string string contiene las letras» win», pero desafortunadamente eso no es lo que-contains hace. Lo que realmente quieren usar es el operador similar:
if (string string-like ‘ * win*’) { }
Sé que no se lee tan bien cuando lo dices en voz alta. Parece una chica del Valle, supongo. «Si, como, esta variable, como, es como, ya sabes, este comodín, dios, ¿realmente?»But-like es el operador correcto para esta tarea.
El operador-contains es un poco más complicado. Está diseñado para indicarle si una colección de objetos incluye (‘contiene’) un objeto en particular. Ahora, si su colección de objetos es un montón de cadenas, esto es bastante sencillo.
$coll = "one','two','three','four'if ($coll -contains 'one') { }
Se vuelve más difícil cuando la colección contiene objetos complejos. Esto no funciona como usted podría pensar:
$coll = Get-Service
if ($coll-contiene ‘BITS’) { }
La variable $coll no contienen la cadena «BITS;» lo que contiene es un objeto de servicio cuya propiedad Name es BITS. Realmente no se puede usar-contiene de esta manera, porque compara todo el objeto. Por ejemplo:
# Get all processes
proc procs = Get-Process
# Get just one process
pro proc=Get-Process / Select-first 1
# Check it
proc procs-contains This proc
Esto casi siempre será Falso. Esto se debe a que, en el tiempo que lleva ejecutar el segundo comando, el primer proceso ha cambiado. Su memoria, CPU o algún otro valor ha cambiado. Aunque $procs contiene el mismo proceso real que $proc, no todas las propiedades son exactamente iguales en ambos casos. So-contains no puede detectar la coincidencia.
Obtenga más información sobre las «Diez molestias principales de PowerShell».»
¿Quieres hacer una pregunta sobre este artículo? Responderé en http://powershell.com/cs/forums/230.aspx!