抑制致命错误(访问被拒绝)

时间:2013-09-17 09:11:47

标签: powershell wmi

在这里围成一圈...... 我正试图处理并继续脚本中的“致命错误”。我知道-EA silentlycontinue不起作用,但继续使用foreach来解决它,但我找到的解决方案对我来说并不适合我,这是一个例子而不是我正在尝试做...

代码:

get-content serverLists.txt | 
foreach {get-wmiobject -computer $_ -query "Select * from win32_logicaldisk where drivetype=3"} | 
Format-Table SystemName,DeviceID,Size,FreeSpace,VolumeName

死于:

get-wmiobject : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
At line:1 char:40
+ get-content serverLists.txt | foreach {get-wmiobject -computer $_ -query "Select ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我希望它继续,我已经尝试并调查了try / catch这只是以可读格式给出了错误并且停止了,我看了ping /端口检查解决方案但是有些服务器在防火墙后面但是确定端口是开放的等我只是想让它处理致命错误并继续......

BTW这不是权利问题,它会通过一大堆服务器然后脚本会死在一个并停止

1 个答案:

答案 0 :(得分:2)

try..catch应该做你想做的事:

Get-Content serverLists.txt | % {
  try {
    gwmi -Computer $_ -Query "SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"
  } catch {}
} | Format-Table SystemName,DeviceID,Size,FreeSpace,VolumeName

或者您可以更改$ErrorActionPreference

$ErrorActionPreference = "SilentlyContinue"
Get-Content serverLists.txt | % {
  gwmi -Computer $_ -Query "SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"
} | Format-Table SystemName,DeviceID,Size,FreeSpace,VolumeName