【问题标题】:Assistance with first time Powershell Exception catching协助第一次捕获 Powershell 异常
【发布时间】:2018-05-12 02:30:24
【问题描述】:

我不是一个程序员,只是偶尔使用 powershell 来完成我的一些任务,因此,我从未在我的 powershell 脚本/命令中进行任何真正的错误处理。

我很难在下面的示例代码中捕获异常,因为它的行为似乎是错误的。这是代码:

$Computers = Get-ADComputer -SearchBase 
"OU=Desktops,OU=Computers,OU=Managed,DC=domain,DC=local" -Filter * | select Name
$Table= ""
$Computers | Foreach  {
    $Name = $_.Name
    try {
        $Table += Get-WmiObject -Class Win32_Product -ComputerName $Name | 
        Where-Object {$_.Name -eq "Product Name"} | select PSComputerName,Name,Version
    }
    catch {
        $Name + " unavailable"
    }
}

似乎发生的情况是,当计算机关闭或不可用时,Get-WmiObject 命令失败,并在 powershell 窗口中显示异常消息。我本来希望我的 Catch 语句看到这个异常,而是输出计算机的 $Name 和文本“不可用”。

当我说它向后发生时,在显示不可用计算机的异常消息后,对于成功的计算机,它会显示 $Name +“不可用”。

我是否误解了 powershell 中错误处理背后的概念,我该如何调整上面的代码来捕获出错的计算机并对它们做一些不同的事情?

【问题讨论】:

标签: powershell error-handling exception-handling


【解决方案1】:

Get-WmiObject 抛出所谓的 终止错误 - 为了让执行在错误时终止并让 catch 块执行,您需要在调用它时指定 -ErrorAction Stop

try {
    $Table += Get-WmiObject -Class Win32_Product -ComputerName $Name -ErrorAction Stop |Where-Object {$_.Name -eq "Product Name"} | select PSComputerName,Name,Version
}
catch {
    $Name + " unavailable"
}

【讨论】:

  • 谢谢马蒂亚斯,试试看
【解决方案2】:

您需要将-ErrorAction Stop 添加到您的Get-WMIObject 通话中。

例子:

try{
    Get-WmiObject -Class asdf -ErrorAction Stop
}
catch{
    Write-Host error!
}

返回

error!

【讨论】:

  • 谢谢瑞恩。会试一试
猜你喜欢
  • 2013-06-25
  • 1970-01-01
  • 2010-09-13
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多