Để 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 $true
rõ ràng cho một [switch]
tham số có tên, -Unify
bâ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 0
hay 1
khô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 -Command
thay vì -File
là 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 -Command
bạ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 $true
và $false
hoạt động (nhưng không true
và false
như bây giờ cũng được chấp nhận với-File
).
Lưu ý :
Việc sử dụng -Command
có 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 -Command
có 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 .