Pertimbangkan skrip Powershell berikut ini, yang mencari folder di C: \ dengan 'og' di namanya:
PS C: \> (ls |% {$ _. Name} |? {$ _. Berisi ("og")}) PerfLogs File program setup.log
Sekarang saya mempersempit pencarian untuk mendapatkan hanya satu item:
PS C: \> (ls |% {$ _. Name} |? {$ _. Berisi ("Prog")}) File program
Yang aneh adalah bahwa operasi pertama menghasilkan array , sedangkan operasi kedua (yang IMHO operasi semantik yang sama, sehingga harus menghasilkan jenis hasil yang sama) menghasilkan string . Ini bisa dilihat pada hasil berikut:
PS C: \> (ls |% {$ _. Name} |? {$ _. Berisi ("og")}). Panjang 3 PS C: \> (ls |% {$ _. Name} |? {$ _. Berisi ("Prog")}). Panjang 13
Ini bisa sangat menjengkelkan, karena ternyata ada lebih sedikit folder yang cocok dengan 'og' daripada mereka yang cocok dengan 'Prog'.
Jelas, PowerShell secara implisit 'unboxes' satu-item array ke satu objek, dan kami tidak pernah mendapatkan array dengan panjang 1. Tampaknya setiap kali saya ingin menghitung hasil yang datang melalui pipa, saya harus memeriksa apakah saya ' Saya berurusan dengan array atau tidak.
Bagaimana saya bisa mencegah hal ini terjadi? Bagaimana Anda menangani ini?
$_.Contains
, maka%{,,$_.Name}
berfungsi ...