Considere el siguiente fragmento:
"12-18" -Contains "-"
Uno pensaría que esto se evalúa true, pero no es así. Esto evaluará a en su falselugar. No estoy seguro de por qué sucede esto, pero lo hace.
Para evitar esto, puede usar esto en su lugar:
"12-18".Contains("-")
Ahora la expresión se evaluará como verdadera.
¿Por qué el primer fragmento de código se comporta así? ¿Hay algo especial en -eso con lo que no se juega bien -Contains? La documentación no menciona nada al respecto.

"12-18".Contains("-")Containsoperador de PowerShell y el método.Contains().NETString.-Matchutiliza expresiones regulares. Eso significa que el parámetro de cadena es una expresión regular, no una cadena normal. Por ejemplo,"hello" -Match "."devolverá verdadero, porque"."es una expresión regular donde un '.' coincidirá con cualquier personaje. Para verificar si una cadena contiene un punto final:"hello" -Match "\."(devuelve falso)-Containses en realidad un operador de colección. Es cierto si la colección contiene el objeto. No se limita a las cuerdas.-matchy-imatchcoinciden con cadenas de expresiones regulares, y establecen variables automáticas para usar con capturas.-like,-ilikeson comparadores de tipo SQL.fuente
Puedes usar
like:O
splitparacontains:fuente
likees lo mejor, o al menos lo más fácil.matchse usa para comparaciones de expresiones regulares.Referencia: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
fuente