Rozważ następujący skrypt Powershell, który wyszukuje foldery w C: \ z „og” w nazwie:
PS C: \> (ls |% {$ _. Nazwa} |? {$ _. Zawiera („og”)}) PerfLogs Pliki programów setup.log
Teraz zawężam wyszukiwanie, aby uzyskać tylko jeden przedmiot:
PS C: \> (ls |% {$ _. Nazwa} |? {$ _. Zawiera („Prog”)}) Pliki programów
Dziwne jest to, że pierwsza operacja daje tablicę , podczas gdy druga operacja (która jest semantycznie tą samą operacją IMHO, więc powinna dać ten sam typ wyniku) daje ciąg . Można to zobaczyć w następującym wyniku:
PS C: \> (ls |% {$ _. Nazwa} |? {$ _. Zawiera („og”)}). Długość 3) PS C: \> (ls |% {$ _. Nazwa} |? {$ _. Zawiera („Prog”)}). Długość 13
Może to być bardzo irytujące, ponieważ najwyraźniej jest mniej folderów pasujących do „og” niż tych, które pasują do „Prog”.
Najwyraźniej PowerShell domyślnie „rozpakowuje” tablicę z jednym elementem do pojedynczego obiektu i nigdy nie otrzymujemy tablicy o długości 1. Wydaje się, że za każdym razem, gdy chcę policzyć wyniki nadchodzące przez potok, muszę sprawdzić, czy „ mam do czynienia z tablicą czy nie.
Jak mogę temu zapobiec? Jak sobie z tym radzisz?
$_.Contains
, to%{,,$_.Name}
działa ...