使用PSSession时混淆ErrorAction行为

时间:2015-07-21 23:20:11

标签: powershell error-handling exchange-server

我正在编写一个脚本,使用类似于以下内容的方式对我的邮件服务器远程运行:

$credentials = Get-Credential
$session = New-PSSession `
    -ConnectionUri http://mailserver/PowerShell/ `
    -Authentication Kerberos `
    -ConfigurationName Microsoft.Exchange `
    -Credential $credentials
$module = Import-PSSession $session

我将通过读取主机,参数或管道从用户接收收件人姓名,因此如果收件人无效且收件人收件人不成功,我希望我的脚本能够挽救。 -ErrorAction似乎是一个合乎逻辑的选择。

get-recipient "doesnotexist" -ErrorAction SilentlyContinue; write-host "will output";
get-recipient "doesnotexist" -ErrorAction Stop; write-host "will output"
get-recipient "doesnotexist" -ErrorAction Inquire; write-host "will not output if halt selected, otherwise displayed"

根据get-help about_CommonParameters,-EA应该修改非终止错误的行为。在这里,我有一个非终止错误,我想处理...终止。我知道EA正在具有一些效果,因为我通过将其设置为“查询”来获得所需的结果(以交互方式)。我想要的是在没有交互的情况下终止,所以我可以尝试/捕捉它。

1 个答案:

答案 0 :(得分:0)

在3小时的大部分时间内解决了这个问题。当我正在接近解决方案时,这似乎是远程处理和导入Exchange会话时的范围错误。我可能弄错了。但是,这里有一个解决它的博客,同时也证实了我的怀疑。

http://rehle.blogspot.dk/2014/11/exchange-remote-sessions.html ....简而言之,对于那些想要避免打开链接或者链接被删除的人:

在使用导入的Exchange PS会话中的Exchange cmdlet的脚本中使用以下内容:

$saved=$global:ErrorActionPreference
$global:ErrorActionPreference='stop'
Try {
$box = get-mailbox nonexistent -ErrorAction Stop
}
Catch {
"Mailbox was not found"
}
Finally {
$global:ErrorActionPreference=$saved
}

我希望它有所帮助,可以帮助别人。霍拉:-D