Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell无法返回正确的退出代码_Powershell_Parameters_Parameter Passing_Exit Code_Errorlevel - Fatal编程技术网

Powershell无法返回正确的退出代码

Powershell无法返回正确的退出代码,powershell,parameters,parameter-passing,exit-code,errorlevel,Powershell,Parameters,Parameter Passing,Exit Code,Errorlevel,使用-File命令行开关执行Powershell脚本(在2.0中)并在Param中显式定义输入参数时,退出代码始终为“0”(永不失败),而不是正确返回定义的或预期的错误代码。 使用显式参数定义和-Command开关时不会出现这种情况,但是出于无关目的,我需要在脚本中保留-File开关 解决方案的任何帮助(不涉及删除显式参数定义)都将非常有用 Powershell“未能返回正确的退出代码”: exit1.ps1:显式定义参数的调用脚本。Errorlevel始终为0,即使脚本的某些部分出现了不礼貌的

使用-File命令行开关执行Powershell脚本(在2.0中)并在Param中显式定义输入参数时,退出代码始终为“0”(永不失败),而不是正确返回定义的或预期的错误代码。
使用显式参数定义和-Command开关时不会出现这种情况,但是出于无关目的,我需要在脚本中保留-File开关

解决方案的任何帮助(不涉及删除显式参数定义)都将非常有用

Powershell“未能返回正确的退出代码”:

exit1.ps1:显式定义参数的调用脚本。Errorlevel始终为0,即使脚本的某些部分出现了不礼貌的失败

param(
    [Parameter(mandatory=$true)][string]$arg1,
    [Parameter(mandatory=$true)][string]$arg2,
    [Parameter(mandatory=$true)][string]$arg3
);
exit 1;
输出:

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"

C:\temp\testnant>echo %errorlevel%
0



现在,让我们在修改param函数使其不那么显式时尝试同样的方法:

Exit1 looseParam.ps1:

param(
    $arg1,
    $arg2,
    $arg3
);
exit 1;
输出(有三个参数):




当您显式定义输入参数时,Powershell似乎出于某种原因“忘记了它的异常功能”,并且无法返回正确的退出代码。


是否有人有解决办法或能够解释为什么会发生这种情况?

嗯,这很奇怪,我希望
退出1
在这两种情况下都有效。至少您可以将其用于以下两个方面:


[Environment]::退出(1)

谢谢您的帮助,刚刚为我解决了一个问题:)没有这个,我只能让退出返回0或1
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"

C:\temp\testnant>echo %errorlevel%
1