2

当 GWMI 查询失败时,我想将自定义错误消息输出到日志。我可以捕捉到异常,但显然只有最后一个,因为我的错误文件中的输出只有列表中最后一台计算机的名称。我正在使用我知道没有启用 WMI 的计算机列表。每个条目都应该有一个条目。

我有一个文本文件中的域计算机列表,每一个都在一行上,没有尾随字符。我使用 GWMI 遍历文件以获取网络信息。有些计算机没有启用 WMI,我想知道哪些计算机。我当前的脚本只是抛出一个:

gwmi : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At line:12 char:17
+         $base = gwmi win32_networkadapterconfiguration -computername $comp | whe ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId :        GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand   

每当它循环通过未启用 wmi 的机器时。

这不会识别引发异常的计算机。我想要的是每次RPC server is unavailable...抛出错误时,都会将自定义错误消息写入日志,其中包含引发异常的计算机的名称。

我的脚本:

$computers = Get-Content -path f:\scripts\docs\computer_list_test.txt

if (F:\scripts\wmi_mac_output.txt){
rm F:\scripts\wmi_mac_output.txt
}

foreach ($comp in $computers) {

try
{

    $base = gwmi win32_networkadapterconfiguration -computername $comp -ErrorAction Stop | where {$_.dnsdomain -eq "mydomain.com"}
    $machine = $base.DNSHostName 
    $mac = $base.MACAddress
    $ip = $base.IPAddress
    "<COMPUTER>`n`tname: $machine`n`tMAC: $mac`n`tIP: $ip`n</COMPUTER>" | Out-File F:\scripts\wmi_mac_output.txt
}


catch [Exception]
{
    if ($_.Exception.GetType().Name -eq "COMException")
    {
       "$comp has no winrm" > f:\scripts\docs\error.txt
    }
}
}

谢谢你。

4

1 回答 1

3

我可以捕捉到异常,但显然只有最后一个,因为我的错误文件中的输出只有列表中最后一台计算机的名称。

问题是 error.txt 被覆盖而不是附加。

"$comp has no winrm" > f:\scripts\docs\error.txt

改成:

"$comp has no winrm" >> f:\scripts\docs\error.txt
于 2013-07-19T16:55:55.373 回答