Windows PowerShell v5.1 / PowerShell Core 7.0.0-Preview.4 के रूप में मौजूदा उत्तरों को संक्षेप और पूरक करने के लिए :
डेविड Mohundro के जवाब हक अंक कि के बजाय [bool]
मापदंडों का उपयोग करना चाहिए [switch]
मापदंडों PowerShell में , जहां उपस्थिति बनाम अभाव स्विच नाम (की -Unify
निर्दिष्ट बनाम नहीं निर्दिष्ट) अपने मूल्य का तात्पर्य है, जो मूल समस्या का समाधान करता है।
हालाँकि, इस अवसर पर आपको स्विच मूल्य को स्पष्ट रूप से पारित करने की आवश्यकता हो सकती है , खासकर यदि आप प्रोग्रामेटिक रूप से कमांड लाइन का निर्माण कर रहे हैं :
PowerShell Core में , मूल समस्या ( सम्राट XLII के उत्तर में वर्णित ) को ठीक कर दिया गया है ।
अर्थात्, $true
एक [switch]
पैरामीटर को स्पष्ट रूप से पास करने के लिए जिसका नाम -Unify
आप अब लिख सकते हैं:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
निम्न मान इस्तेमाल किया जा सकता: $false
, false
, $true
, true
, लेकिन ध्यान दें कि गुजर 0
या 1
करता है नहीं काम करते हैं।
ध्यान दें कि स्विच नाम को किस मान से अलग किया गया है :
और दोनों के बीच कोई व्हाट्सएप नहीं होना चाहिए ।
नोट: यदि आप एक [bool]
पैरामीटर की घोषणा करते हैं बजाय [switch]
(जिसे आप आमतौर पर नहीं करना चाहिए), तो आपको एक ही वाक्यविन्यास का उपयोग करना चाहिए; भले ही काम -Unify $false
करना चाहिए , यह वर्तमान में नहीं है - इस GitHub मुद्दे को देखें ।
में विंडोज PowerShell , मूल समस्या बनी रहती है यह देखते हुए कि विंडोज PowerShell अब सक्रिय रूप से विकसित कर रहा है - -, और तय करने के लिए की संभावना नहीं है।
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
जब -Command
आप PowerShell कोड के एक टुकड़े को प्रभावी रूप से पास कर रहे हों , जो तब सामान्य रूप से मूल्यांकन किया जाता है - और PowerShell के अंदर $true
और पास होने पर $false
काम करता है (लेकिन नहीं true
और false
, जैसा कि अब भी स्वीकार किया गया है -File
)।
कैविट्स :
उपयोग करने -Command
से आपके तर्कों की अतिरिक्त व्याख्या हो सकती है, जैसे कि उनमें $
वर्ण होते हैं । (के साथ -File
, तर्क शाब्दिक हैं )।
उपयोग करने के -Command
परिणामस्वरूप एक अलग निकास कोड हो सकता है ।
विवरण के लिए, यह उत्तर और यह उत्तर देखें ।