Considere o seguinte script do Powershell, que procura pastas em C: \ com um 'og' no nome:
PS C: \> (ls |% {$ _. Nome} |? {$ _. Contém ("og")})
PerfLogs
Arquivos de Programas
setup.log
Agora refino a pesquisa para obter apenas um item:
PS C: \> (ls |% {$ _. Nome} |? {$ _. Contém ("Prog")})
Arquivos de Programas
O estranho é que a primeira operação gera uma matriz , enquanto a segunda operação (que é IMHO semanticamente a mesma operação, portanto deve produzir o mesmo tipo de resultado) gera uma string . Isso pode ser visto no seguinte resultado:
PS C: \> (ls |% {$ _. Nome} |? {$ _. Contém ("og")}). Comprimento
3
PS C: \> (ls |% {$ _. Nome} |? {$ _. Contém ("Prog")}). Comprimento
13
Isso pode ser muito irritante, pois aparentemente há menos pastas que correspondem a 'og' do que aquelas que correspondem a 'Prog'.
Evidentemente, o PowerShell implicitamente 'unboxes' uma matriz de item único para um único objeto, e nunca temos uma matriz de comprimento 1. Parece que toda vez que eu quero contar os resultados que chegam ao pipeline, tenho que verificar se eu ' estou lidando com uma matriz ou não.
Como posso impedir que isso aconteça? Como você lida com isso?
$_.Contains, em seguida,%{,,$_.Name}funciona ...