2

我在连接到 live@edu 的 olSync 服务器上使用 PowerShell 2.0。我正在尝试使用 try/catch 语句。

为了在 live@edu 服务器上运行,我们必须运行一个使用 Import-PSSession 命令的脚本。

我遇到的问题是,在我连接到另一个会话之前,try/catch 语句可以完美运行,但是在我连接之后,错误并没有被捕获并且像正常情况一样显示。

(我所说的完美工作的意思是他们没有出现,而我对用户更友好的回应显示)

我错过了什么?我只是对 PSSession 命令不够了解吗?

连接代码(出于显而易见的原因,我没有包含凭据)

$Session = New-PSSession -ConfigurationName Microsoft.Exchange 
           -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred 
          -Authentication Basic -AllowRedirection  

Import-PSSession $Session

我正在测试的示例代码

$count = 0  
$name = "quit"  
$x  

do  
{   
try    
{  
    $name = Read-Host 'What is the username?'  
    $x = get-mailbox $name  
    write-host $x  
}  
catch  
{  
       Write-Host "Oh No!`n $error[0].exception"  
       $count++  
}  
}  
while ($name -ne "quit")  

write-host "$count errors happened"  

输出连接时

What is the username?: test  
test, test  

What is the username?: test2  
The operation couldn't be performed because object 'test2' couldn't be found on ...  

What is the username?: quit  
The operation couldn't be performed because object 'quit' couldn't be found on ...  

0 errors happened  
test  

.
未连接时输出

用户名是什么?:测试
哦不!
术语“get-mailbox”未被识别为 cmdlet、函数、脚本文件、> 或可运行程序的名称。检查名称的拼写,或者如果包含路径,
请验证路径是否正确并重试。术语“get-mailbox”
未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。
检查名称的拼写,或者如果包含路径,请验证
路径是否正确并重试。[0].exception

4

1 回答 1

3

您收到的错误可能是非终止错误,并且 try..catch 仅捕获终止错误。解决方案是在终止错误中转换所有错误。这可以通过使用 ErrorAction 参数或通过为您的脚本设置它来完成$ErrorActionPreference = 'Stop'

$x = get-mailbox $name -ErrorAction Stop

这里这里这里

于 2013-06-19T19:24:23.770 回答