【发布时间】: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 中错误处理背后的概念,我该如何调整上面的代码来捕获出错的计算机并对它们做一些不同的事情?
【问题讨论】:
-
This article written by Adam Bertram 是 try/catch 块及其工作原理的首选来源。
-
感谢 Bryce,一定会看一下以了解 try/catch。谢谢
-
@BryceMcDonald This article 也非常擅长解释所有异常情况。
标签: powershell error-handling exception-handling