如何仅在非交互式运行时从Powershell脚本返回退出代码

sco*_*obi 7 powershell

我有很多脚本按计划任务运行.因此,他们$host.setshouldexit(1)对任何失败都做了一次失败,它在任务调度程序中显示为返回码.

我还希望能够在调试和测试时以交互方式运行这些脚本.所以$host.setshouldexit()杀死我的powershell或ISE会话.

我的问题是:如何检测脚本是否以非交互方式运行?如果是,那么我将使用setshouldexit,否则它将打印错误代码或非破坏性的东西.(请注意,我不想使用,[environment]::userinteractive因为这些脚本并不总是在操作系统认为是非交互式会话中运行.)

我正在使用一个非交互式开关来执行计划任务.有什么方法可以从powershell查询吗?

Dro*_*roj 7

$Host.SetShouldExit方法不是必需的,实际上是不一致的,具体取决于您调用脚本的方式.使用关键字exit可以获得退出状态.

使用powershell -F script.ps1:

  • exit - 工作
  • SetShouldExit - 忽略了

使用powershell -c '.\script.ps1':

  • exit - 状态分别降至0或1,表示脚本成功或失败.
  • SetShouldExit - 以正确状态退出,但脚本中的剩余行仍然运行.

使用powershell -c '.\script.ps1; exit $LASTEXITCODE'[ 1 ]:

  • exit - 工作
  • SetShouldExit - 退出状态== 0,脚本中的剩余行仍然运行.

直接从powershell(> .\script.ps1)调用:

  • exit - 工作
  • SetShouldExit - 终止以给定退出状态调用powershell主机