了解Powershell试试Catch
问题描述:
我遇到的问题了解try,catch语句的用法。了解Powershell试试Catch
我想用它作为一般的错误检测的情况下,这样是有任何问题,在给定功能的脚本将输出“服务器脱机”
以下代码段查询服务器上的WMI对象为它的硬盘列表并将其格式化为表格。如果服务器或WMI不可用,我希望将“服务器脱机”附加到txt输出文件。
当出现错误时从不调用catch语句。
可以试试这种方式吗?
try {
Get-WmiObject Win32_LogicalDisk -ComputerName $server | ft $server,deviceid,@{Label="Size(GB)";Expression={($_.Size/ 1gb) -as [int]}},@{Label="FreeSpace(Mb)";Expression={($_.FreeSpace/1mb) -as [int]}} -auto | Out-File c:\temp\ServersHDDAudit_OUTPUT-$a-$b.txt -Append
}
catch {
$server + ": Server Offline" | Out-File c:\temp\ServersHDDAudit_OUTPUT-$a-$b.txt -Append
}
塞缪尔
答
你会发现在我other post here一个方面的信息,但是当你在PowerShell中写了cmdlet时,可以决定抛出异常或管理的错误。 Get-WmiObject
管理错误,以便写入错误并返回值。你可以让它“默默地继续”,抛出你自己的例外。
try
{
$ld = Get-WmiObject Win32_LogicalDisk -ComputerName $server -ErrorAction SilentlyContinue
if ($ld -ne $null)
{
$ld | ft $server,deviceid,@{Label="Size(GB)";Expression={($_.Size/ 1gb) -as [int]}},@{Label="FreeSpace(Mb)";Expression={($_.FreeSpace/1mb) -as [int]}} -auto | Out-File c:\temp\ServersHDDAudit_OUTPUT-$a-$b.txt -Append
}
else
{
throw $Error[0].exception.Message
}
}
catch
{
$server + ": $_" | Out-File c:\temp\ServersHDDAudit_OUTPUT-$a-$b.txt -Append
}
备注:您可以设置-ErrorAction Stop
参数必须由Get-WmiObject
抛出异常。或者你可以指定$ErrorActionPreference = "stop"
如果你想让所有的Cdmlet抛出异常错误。
答
Try/catch仅适用于终止错误。根据我的经验,Get-WmiObject
产生的99%的错误没有终止,所以在这种情况下catch不会有任何效果。
你可以做的一件事是让命令抛出的任何错误终止错误,你可以用-ErrorAction Stop
来做到这一点。通过'停止'将使错误成为允许catch块调用的终止错误
最后一行'$ ErrorActionPreference =“stop”'对于try {} catch {}'来说是非常重要和方便的。如果'try {}'中的任何内容导致任何错误,它都会导致'catch {}'运行。 – BeowulfNode42 2014-02-14 08:36:05