Để tóm tắt và bổ sung cho các câu trả lời hiện có , kể từ Windows PowerShell v5.1 / PowerShell Core 7.0.0-preview.4:
Câu trả lời của David Mohundro đã chỉ ra một cách chính xác rằng thay vì các [bool]tham số, bạn nên sử dụng [switch]các tham số trong PowerShell , trong đó sự hiện diện so với không có tên công tắc ( -Unifyđược chỉ định so với không được chỉ định) ngụ ý giá trị của nó , điều này làm cho vấn đề ban đầu biến mất.
Tuy nhiên, đôi khi bạn vẫn có thể cần phải chuyển giá trị chuyển đổi một cách rõ ràng , đặc biệt nếu bạn đang xây dựng một dòng lệnh theo chương trình :
Trong PowerShell Core , sự cố ban đầu (được mô tả trong câu trả lời của Emperor XLII ) đã được khắc phục .
Nghĩa là, để truyền $truerõ ràng cho một [switch]tham số có tên, -Unifybây giờ bạn có thể viết:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
Các giá trị sau đây có thể được sử dụng: $false, false, $true, true, nhưng lưu ý rằng đi qua 0hay 1không không làm việc.
Lưu ý cách tên chuyển đổi được phân tách khỏi giá trị bằng :và không được có khoảng trắng giữa hai.
Lưu ý: Nếu bạn khai báo một [bool]tham số thay vì một [switch](mà bạn thường không nên), bạn phải sử dụng cùng một cú pháp; mặc dù -Unify $false sẽ hoạt động nhưng hiện tại thì không - hãy xem vấn đề GitHub này .
Trong Windows PowerShell , sự cố ban đầu vẫn tiếp diễn và - do Windows PowerShell không còn được phát triển tích cực - khó có thể được khắc phục.
Cách giải quyết được đề xuất trong câu trả lời của LarsWA - mặc dù nó dựa trên chủ đề trợ giúp chính thức của bài viết này - không hoạt động trong v5.1
- Sự cố GitHub này yêu cầu sửa tài liệu và cũng cung cấp một lệnh kiểm tra cho thấy cách giải quyết không hiệu quả.
Sử dụng -Commandthay vì -Filelà cách giải quyết hiệu quả duy nhất :
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
Với việc -Commandbạn đang chuyển một cách hiệu quả một đoạn mã PowerShell , mã này sau đó được đánh giá như bình thường - và bên trong PowerShell truyền $truevà $falsehoạt động (nhưng không true và falsenhư bây giờ cũng được chấp nhận với-File ).
Lưu ý :
Việc sử dụng -Commandcó thể dẫn đến việc giải thích bổ sung các đối số của bạn, chẳng hạn như nếu chúng chứa $ký tự. (với -File, đối số là nghĩa đen ).
Sử dụng -Commandcó thể dẫn đến một mã thoát khác .
Để biết chi tiết, hãy xem câu trả lời này và câu trả lời này .