powershell - -command का निकास कोड स्क्रिप्ट के निकास कोड के समान नहीं है




exit-code (2)

मुझे PowerShell -Command "और scriptname" के साथ एक स्क्रिप्ट चलाने की आवश्यकता है, और मुझे वास्तव में यह पसंद आएगा यदि PowerShell से बाहर निकलने वाला निकास कोड स्क्रिप्ट स्वयं लौटा हुआ निकास कोड जैसा ही था। दुर्भाग्यवश, यदि स्क्रिप्ट 0 देता है, तो PowerShell 0 देता है, और 1 यदि स्क्रिप्ट नीचे दिखाए गए अनुसार कोई गैर-शून्य मान देता है:

PS C:\test> cat foo.ps1
exit 42
PS C:\test> ./foo.ps1
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "exit 42"
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "& ./foo.ps1"
PS C:\test> echo $lastexitcode
1
PS C:\test>

[पर्यावरण] का उपयोग करना :: निकास (42) लगभग काम करता है:

PS C:\test> cat .\baz.ps1
[Environment]::Exit(42)
PS C:\test> powershell -Command "& ./baz.ps1"
PS C:\test> echo $lastexitcode
42
PS C:\test>

सिवाय इसके कि जब स्क्रिप्ट interactively चलाया जाता है, यह पूरे खोल से बाहर निकलता है। कोई सुझाव?


आप अपनी स्क्रिप्ट को अंतःक्रियात्मक तरीके से कैसे बुला रहे हैं?

मैंने यह कोशिश की है और ऐसा लगता है कि यह ठीक काम करता है, लेकिन मैं इसे डीओएस प्रॉम्प्ट से कॉल करता हूं, पावरशेल के भीतर नहीं

C:\Temp>type foo.ps1
exit 42


C:\Temp>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\foo.ps1

C:\Temp>echo %errorlevel%
42

c:\Temp>

कैवेट: यदि आपकी पावरशेल स्क्रिप्ट बाहर निकलने वाले 65535 से बाहर निकलती है, तो वे रोल करते हैं:

$exitCode = 65536
Exit $exitCode

यदि निम्नलिखित सीएमडी उपरोक्त इस पीएस 1 स्क्रिप्ट को कॉल करता है, तो आपको 0 % त्रुटि का% त्रुटि मिल जाएगा

Powershell.exe "& 'MyPowershellScript.ps1' "; exit $LASTEXITCODE
SET ERR=%ERRORLEVEL%

और 65537 का एक निकास आपको 1 का त्रुटि त्रुटि% 1 देगा।

इस बीच, यदि एक सीएमडी एक और कॉल करता है और बाल स्क्रिप्ट 65535 से अधिक त्रुटि वाले रिटर्न देता है, तो यह ठीक से गुजरता है।

Cmd /c exit 86666

उम्मीदवार के रूप में सीएमडी 86666 का% त्रुटि स्तर% वापस कर देगा।

इन सभी के लिए चेतावनी: अब यह किसी भी स्पष्ट कारण के लिए चालू और बंद हो रहा है।





exit-code