【问题标题】:How to return custom Errorlevel in PowerShell?如何在 PowerShell 中返回自定义错误级别?
【发布时间】:2019-03-12 05:15:57
【问题描述】:

我想从命令行运行脚本,并获取错误级别。 我使用这个批处理脚本。

set log=C:\Users\PowerShell\XML\Log.txt
set PS=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
set PS=%PS%\powershell.exe 

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" C:\Users\XML.ps1 -i C:\Users\A2.txt -j C:\Users\Fb.xml
   
echo %ERRORLEVEL% > "%log%"

我试过这个脚本来获取自定义的errorlevel,如果找到,它将返回123,否则返回456。但它总是给我1

$regex = [regex]$Pattern

$matching = $regex.Match($FBString)
if ($matching.Success) {
    while ($matching.Success) {
        "Match found: {0}" -f $matching.Value
        Exit 123
        $matching = $matching.NextMatch()
    }
}
else {
    "Not Found"
    Exit 456
}

【问题讨论】:

    标签: powershell batch-file exit-code errorlevel


    【解决方案1】:

    Exit 更改为 ReturnExit 将退出您的脚本。 Return 将返回您想要的值。

    【讨论】:

    • 当我从 powershell 运行它时它可以工作。但我想通过使用批处理文件来获取错误级别值
    • 0 表示脚本运行成功,1 表示有错误。如果您想批量捕获相同的内容,则已将它们重定向到标准输出
    • ( exit ) 设置系统 %errorlevel% 环境变量...而 ( return ) 将尝试将对象 传递给调用代码...或通过默认将其写入默认值...所以您是否想使用批处理文件或其他可执行文件来调用您的powershell代码并以操作系统标准方式与结果交互...您应该使用 exit ;-)
    • 不幸的是,我不同意,因为您的回答不正确(至少不再如此)。 Using exit \b 123 is best practice for exit-codes since windows 2000/xp(几乎在这个链接的按钮上)。
    【解决方案2】:

    您可以在脚本中编写逻辑
    所以任何退出点都会设置%errorlevel%系统变量...

    并创建您的“错误返回逻辑”...

    类似这样的东西:

    if ( $LASTEXITCODE -eq 0 ) { exit 0  }
    if ( $LASTEXITCODE -eq 1 ) { exit 1  }
    if ( $x -gt 1 ) { exit 2  }
    if ( $x -lt 1 ) { exit 3  }
    ...
    

    然后您可以从批处理文件中检查%errorlevel% == 012、...

    【讨论】:

      【解决方案3】:

      使用 powershell -file 运行脚本。默认为 powershell -command。一旦该脚本结束,使用 -command 会话仍在继续。

      【讨论】:

      • 非常感谢!这节省了我的时间......并且应该是公认的答案(无需重写脚本,所需的退出代码直接放入 %errorlevel%)。
      【解决方案4】:

      问题出在批处理文件中。应该是这样的:

      set log=C:\Users\PowerShell\XML\Log.txt
      set PS=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
      set PS=%PS%\powershell.exe -ExecutionPolicy Bypass -File
      
      
      "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File C:\Users\XML.ps1 -i C:\Users\A2.txt -j C:\Users\Fb.xml
      
      echo %ERRORLEVEL% > "%log%"
      

      对于第一个 PowerShell 脚本已经正确。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 2012-11-21
        • 1970-01-01
        相关资源
        最近更新 更多