我有一个从打印服务器获取所有打印机对象的小函数,如果后台打印程序服务不可用(例如,主机名错误),cmdlet会抛出一个错误。我想用try catch捕获那个错误消息,但它不能捕获?有人能给我解释一下这种行为吗?
代码:
Function GetAllPrinters
{
param
(
[Parameter(Mandatory=$true)]
[string]$PrintServerHostName
)
try {
$Printers = Get-Printer -ComputerName $PrintServerHostName
}
catch {
Write-Host "Could not receive information from the print server $PrintServerHostName."
exit 1001
}
return $Printers
}错误消息:
Get-Printer : Der Spoolerdienst ist nicht erreichbar. Stellen Sie sicher, dass der Spoolerdienst ausgeführt wird.
In C:\Users\f.zedler\Desktop\GetPrintServerStatus.ps1:34 Zeichen:21
+ $Printers = Get-Printer -ComputerName $PrintServerHostName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (MSFT_Printer:ROOT/StandardCimv2/MSFT_Printer) [Get-Printer], CimException
+ FullyQualifiedErrorId : HRESULT 0x800706ba,Get-Printer发布于 2017-01-18 04:38:39
您遇到了终止错误与非终止错误的概念。
一些函数可以抛出错误,但仍然可以继续运行而没有任何问题,它们可能只是向错误流抛出错误并继续运行。我们称之为非终止错误。
其他人可能会让你陷入糟糕的境地或引发问题,他们最好是犯错并停止。我们称这些终止错误为。
终止错误具有很好的附加值,因为它们能够触发try/catch块,而大多数其他错误则不能。
这个函数似乎抛出了一个非终止错误,它忽略了try/catch块。但是,您可以通过为-ErrorAction指定一个选项来覆盖它,这是一个公共参数,可用于所有cmdlet。
您的选择如下:
查询错误-询问您是否继续,但写出错误messages
因此,总而言之,既然您的函数似乎忽略了try/catch块,那么请尝试添加-ErrorAction STOP。这可能会解决这个问题。
Get-Printer -ErrorAction Stop发布于 2017-01-18 04:35:08
尝试使用Get-Printer -ComputerName $PrintServerHostName -ErrorAction Stop或将$erroractionpreference设置为停止。
发布于 2020-08-25 01:52:42
仅供参考,在下面的脚本中,我必须将"-erroraction stop“选项移到第一个管道符号之前。
$e=Get-Printer -ComputerName $lbpclist.SelectedItem -ErrorAction stop | Where-Object {$_.Name -like $txtPrinterName.Texthttps://stackoverflow.com/questions/41706344
复制相似问题