Considere el siguiente script de Powershell, que busca carpetas en C: \ con un 'og' en su nombre:
PS C: \> (ls |% {$ _. Name} |? {$ _. Contiene ("og")}) PerfLogs Archivos de programa setup.log
Ahora limito la búsqueda para obtener solo un elemento:
PS C: \> (ls |% {$ _. Name} |? {$ _. Contiene ("Prog")}) Archivos de programa
Lo extraño es que la primera operación produce una matriz , mientras que la segunda operación (que en mi humilde opinión es semánticamente la misma operación, por lo que debería producir el mismo tipo de resultado) produce una cadena . Esto se puede ver en el siguiente resultado:
PS C: \> (ls |% {$ _. Name} |? {$ _. Contiene ("og")}). Longitud 3 PS C: \> (ls |% {$ _. Name} |? {$ _. Contiene ("Prog")}). Longitud 13
Esto puede ser muy irritante, ya que aparentemente hay menos carpetas que coinciden con 'og' que las que coinciden con 'Prog'.
Evidentemente, PowerShell 'desempaqueta' implícitamente una matriz de un solo elemento en un solo objeto, y nunca obtenemos una matriz de longitud 1. Parece que cada vez que quiero contar los resultados que vienen por la tubería, tengo que verificar si ' Estoy tratando con una matriz o no.
¿Cómo puedo evitar que esto suceda? Como tratas con esto?
$_.Contains
, entonces%{,,$_.Name}
funciona ...