Hãy xem xét tập lệnh Powershell sau, tìm kiếm các thư mục trong C: \ với một 'og' trong tên của chúng:
PS C: \> (ls |% {$ _. Tên} |? {$ _. Chứa ("og")}) Nhật ký hoàn hảo File chương trình setup.log
Bây giờ tôi thu hẹp tìm kiếm để chỉ nhận một mục:
PS C: \> (ls |% {$ _. Tên} |? {$ _. Chứa ("Prog")}) File chương trình
Điều kỳ lạ là hoạt động đầu tiên mang lại một mảng , trong khi đó hoạt động thứ hai (là IMHO về mặt ngữ nghĩa giống như hoạt động, do đó, nó sẽ mang lại cùng loại kết quả) mang lại một chuỗi . Điều này có thể được nhìn thấy trong kết quả sau đây:
PS C: \> (ls |% {$ _. Tên} |? {$ _. Chứa ("og")}). Độ dài 3 PS C: \> (ls |% {$ _. Tên} |? {$ _. Chứa ("Prog")}). Độ dài 13
Điều này có thể rất khó chịu, vì rõ ràng có ít thư mục khớp với 'og' hơn so với những người khớp với 'Prog'.
Rõ ràng, PowerShell ngầm 'unboxes' một mảng một mục duy nhất cho một đối tượng và chúng tôi không bao giờ có được một mảng có độ dài 1. Dường như mỗi lần tôi muốn đếm kết quả qua đường ống, tôi phải kiểm tra xem tôi có ' m xử lý một mảng hay không.
Làm thế nào tôi có thể ngăn chặn điều này xảy ra? Làm thế nào để bạn đối phó với điều này?
$_.Contains
, thì hãy%{,,$_.Name}
làm việc ...