C : \에서 이름에 'og'가있는 폴더를 검색하는 다음 Powershell 스크립트를 고려하십시오.
PS C : \> (ls | % {$ _. Name} |? {$ _. 포함 ( "og")}) 성능 로그 프로그램 파일 setup.log
이제 검색 범위를 좁혀 하나의 항목 만 얻습니다.
PS C : \> (ls | % {$ _. Name} |? {$ _. Contains ( "Prog")}) 프로그램 파일
이상한 것은 첫 번째 연산이 배열을 생성하는 반면, 두 번째 연산 (의미 적으로 동일한 연산이므로 동일한 유형의 결과를 생성해야 함)은 문자열을 생성한다는 것 입니다. 이것은 다음 결과에서 볼 수 있습니다.
PS C : \> (ls | % {$ _. Name} |? {$ _. 포함 ( "og")}). 길이 삼 PS C : \> (ls | % {$ _. Name} |? {$ _. 포함 ( "Prog")}). 길이 13
'Prog'와 일치하는 폴더보다 'og'와 일치하는 폴더가 적기 때문에 이것은 매우 자극적입니다.
분명히 PowerShell은 단일 항목 배열을 단일 개체에 암시 적으로 '개봉'하고 길이가 1 인 배열을 얻지 못합니다. 파이프 라인에서 오는 결과를 계산할 때마다 파이프 라인을 통해 오는 결과를 계산할 때마다 m은 배열을 다루거나하지 않습니다.
이 문제가 발생하지 않도록하려면 어떻게해야합니까? 이것을 어떻게 처리합니까?
$_.Contains
, 다음%{,,$_.Name}
작동합니다 ...