协助首次捕获Powershell异常

协助首次捕获Powershell异常,powershell,error-handling,exception-handling,Powershell,Error Handling,Exception Handling,我不是一个程序员,只是偶尔使用powershell来完成一些任务,因此,我从未在powershell脚本/命令中执行过任何真正的错误处理 在下面的示例代码中,我正在绞尽脑汁捕捉异常,因为它的行为似乎是错误的。代码如下: $Computers = Get-ADComputer -SearchBase "OU=Desktops,OU=Computers,OU=Managed,DC=domain,DC=local" -Filter * | select Name $Table= "" $Comput

我不是一个程序员,只是偶尔使用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和文本“Unavailable”

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


我是否误解了powershell中错误处理背后的概念,如何调整上述代码以捕获出错的计算机并对其执行不同的操作?

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"
}

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"
}

您需要将
-ErrorAction Stop
添加到
Get WMIObject
调用中

例如:

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

error!

您需要将
-ErrorAction Stop
添加到
Get WMIObject
调用中

例如:

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

error!

是一个关于try/catch块及其工作原理的源代码。感谢Bryce,他一定会看一看,以了解try/catch。Thanks@BryceMcDonald他也很擅长解释所有的事情。是一个关于try/catch块及其工作原理的源代码。感谢Bryce,他一定会看一看,以了解try/catch。Thanks@BryceMcDonald也很擅长解释所有例外情况。谢谢Ryan。我会给你打电话的,汉克斯·瑞安。会给这个一个goThanks Mathias,会给这个goThanks Mathias,会给这个一个尝试