为什么Powershell ISE和命令行中的错误处理不同?

时间:2019-03-22 04:11:25

标签: shell powershell powershell-v6.0

我有一个Powershell脚本,该脚本使用azure cli登录并执行其他操作。一开始我就设置

$ErrorActionPreference = "Stop"

当我在ps ISE中运行脚本并且azure登录失败时,将按预期显示错误并停止执行。但是,当我从ps命令行(或从调用该脚本的批处理)运行脚本时,会显示错误-并且执行继续吗?!

我尝试了try / catch,在那儿也一样,catch只在ISE中被击中,而不是在命令行中被击中。

这对我来说似乎很奇怪。任何人都知道是什么原因造成的,以及如何解决?重新启动没有帮助:-)

1 个答案:

答案 0 :(得分:0)

这个答案可能有点晚了,但是我在连接EWS时也遇到了同样的问题。 在Powershell ISE上可以正常工作,但在Powershell.exe上却不能工作。

经过数小时的测试,我终于发现Powershell和ISE在处理错误方面有区别。

$errorlength = $Error.Count
$EmailAddress= Get-Mailbox -Identity $shortname.SamAccountName| Select-Object WindowsEmailAddress
if($errorlength -lt $Error.Count){
    throw "Bad thing happened"
}

我的问题是,地址列表中的一些邮箱位于office365云中,而某些邮箱位于Exchange服务器上。 Powershell ISE不知何故终止了该错误,而Powershell本身并未终止。

如果您的错误始终都在相同的位置发生,这也应该对您有用。

如果错误计数器增加,它将强制程序终止。