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 ...