Untuk meringkas dan melengkapi jawaban yang ada , pada Windows PowerShell v5.1 / PowerShell Core 7.0.0-preview.4:
Jawaban David Mohundro dengan tepat menunjukkan bahwa alih[bool][switch] - alih parameter Anda harus menggunakan parameter di PowerShell , di mana ada atau tidaknya nama sakelar ( -Unifyditentukan vs. tidak ditentukan) menyiratkan nilainya , yang membuat masalah aslinya hilang.
Namun, terkadang Anda mungkin masih perlu meneruskan nilai sakelar secara eksplisit , terutama jika Anda membuat baris perintah secara terprogram :
Di PowerShell Core , masalah asli (dijelaskan dalam jawaban Kaisar XLII ) telah diperbaiki .
Artinya, untuk meneruskan $truesecara eksplisit ke [switch]parameter bernama -UnifyAnda sekarang dapat menulis:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
Nilai-nilai berikut dapat digunakan: $false, false, $true, true, tapi catatan yang lewat 0atau 1tidak tidak bekerja.
Perhatikan bagaimana nama sakelar dipisahkan dari nilai dengan :dan tidak boleh ada spasi kosong di antara keduanya.
Catatan: Jika Anda mendeklarasikan [bool]parameter alih-alih a [switch](yang biasanya tidak seharusnya), Anda harus menggunakan sintaks yang sama; meskipun -Unify $false seharusnya berfungsi, saat ini tidak - lihat masalah GitHub ini .
Di Windows PowerShell , masalah asli tetap ada , dan - mengingat bahwa Windows PowerShell tidak lagi dikembangkan secara aktif - tidak mungkin diperbaiki.
Solusi yang disarankan dalam jawaban LarsWA - meskipun didasarkan pada topik bantuan resmi saat tulisan ini dibuat - tidak berfungsi di v5.1
- Masalah GitHub ini meminta dokumentasi dikoreksi dan juga menyediakan perintah pengujian yang menunjukkan ketidakefektifan solusi tersebut.
Menggunakan -Commandalih-alih -Fileadalah satu-satunya solusi efektif :
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
Dengan -CommandAnda secara efektif mengirimkan sepotong kode PowerShell , yang kemudian dievaluasi seperti biasa - dan di dalam PowerShell meneruskan $truedan $falseberfungsi (tetapi tidak true dan false, seperti sekarang juga diterima dengan -File).
Peringatan :
Penggunaan -Commanddapat menghasilkan interpretasi tambahan atas argumen Anda, seperti jika argumen berisi $karakter. (dengan -File, argumen adalah literal ).
Penggunaan -Commanddapat menghasilkan kode keluar yang berbeda .
Untuk detailnya, lihat jawaban ini dan jawaban ini .