当 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
}
}
}
谢谢你。