首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell尝试捕获Get-Printer

Powershell尝试捕获Get-Printer
EN

Stack Overflow用户
提问于 2017-01-18 04:28:17
回答 3查看 1.5K关注 0票数 1

我有一个从打印服务器获取所有打印机对象的小函数,如果后台打印程序服务不可用(例如,主机名错误),cmdlet会抛出一个错误。我想用try catch捕获那个错误消息,但它不能捕获?有人能给我解释一下这种行为吗?

代码:

代码语言:javascript
复制
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
}

错误消息:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2017-01-18 04:38:39

您遇到了终止错误与非终止错误的概念。

一些函数可以抛出错误,但仍然可以继续运行而没有任何问题,它们可能只是向错误流抛出错误并继续运行。我们称之为非终止错误

其他人可能会让你陷入糟糕的境地或引发问题,他们最好是犯错并停止。我们称这些终止错误为

终止错误具有很好的附加值,因为它们能够触发try/catch块,而大多数其他错误则不能。

这个函数似乎抛出了一个非终止错误,它忽略了try/catch块。但是,您可以通过为-ErrorAction指定一个选项来覆盖它,这是一个公共参数,可用于所有cmdlet。

您的选择如下:

查询错误-询问您是否继续,但写出错误messages

  • SilentlyContinue -继续运行,但写出错误(silently!)

  • STOP -继续运行,但清除错误- this is

因此,总而言之,既然您的函数似乎忽略了try/catch块,那么请尝试添加-ErrorAction STOP。这可能会解决这个问题。

代码语言:javascript
复制
 Get-Printer -ErrorAction Stop
票数 2
EN

Stack Overflow用户

发布于 2017-01-18 04:35:08

尝试使用Get-Printer -ComputerName $PrintServerHostName -ErrorAction Stop或将$erroractionpreference设置为停止。

票数 0
EN

Stack Overflow用户

发布于 2020-08-25 01:52:42

仅供参考,在下面的脚本中,我必须将"-erroraction stop“选项移到第一个管道符号之前。

代码语言:javascript
复制
$e=Get-Printer -ComputerName $lbpclist.SelectedItem -ErrorAction stop | Where-Object {$_.Name -like $txtPrinterName.Text
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41706344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档