พิจารณาสคริปต์ Powershell ต่อไปนี้ซึ่งค้นหาโฟลเดอร์ใน C: \ ด้วย 'og' ในชื่อ:
PS C: \> (ls |% {$ _. ชื่อ} |? {$ _. ประกอบด้วย ("og")}) PerfLogs ไฟล์โปรแกรม Setup.log
ตอนนี้ฉัน จำกัด การค้นหาเพื่อรับรายการเดียว:
PS C: \> (ls |% {$ _. ชื่อ} |? {$ _. ประกอบด้วย ("Prog")}) ไฟล์โปรแกรม
สิ่งที่แปลกก็คือว่าการดำเนินการครั้งแรกที่อัตราผลตอบแทนถัวอาร์เรย์ในขณะที่การดำเนินงานที่สอง (ซึ่งเป็นความหมาย IMHO ดำเนินการเดียวกันดังนั้นจึงควรให้ผลผลิตชนิดเดียวกันผล) มีผลเป็นสตริง สามารถเห็นได้ในผลลัพธ์ต่อไปนี้:
PS C: \> (ls |% {$ _. ชื่อ} |? {$ _. ประกอบด้วย ("og")}) ความยาว 3 PS C: \> (ls |% {$ _. ชื่อ} |? {$ _. ประกอบด้วย ("Prog")}) ความยาว 13
สิ่งนี้อาจสร้างความรำคาญได้เนื่องจากเห็นว่ามีโฟลเดอร์ที่ตรงกับ 'og' น้อยกว่าเมื่อเทียบกับ 'Prog'
เห็นได้ชัดว่า PowerShell นัย 'unbox' อาร์เรย์รายการเดียวกับวัตถุเดียวและเราไม่เคยได้รับความยาว 1 อาร์เรย์ดูเหมือนว่าทุกครั้งที่ฉันต้องการที่จะนับผลลัพธ์ที่มาจากท่อฉันต้องตรวจสอบว่าฉัน ' จัดการกับอาเรย์หรือไม่
ฉันจะป้องกันไม่ให้สิ่งนี้เกิดขึ้นได้อย่างไร คุณจัดการกับสิ่งนี้ได้อย่างไร
$_.Contains
แล้ว%{,,$_.Name}
ทำงาน ...