我正在尝试使用WMI从域中的所有计算机获取主机名,IP和MAC地址,并将它们存储在文本文件中。 当我运行我的代码时,我收到以下错误:
gwmi : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)>
At line:10 char:13
+ $base = gwmi win32_networkadapterconfiguration -computername $comp | where { ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
如果我对一台机器运行gwmi,它运行正常。我可以得到我需要的信息
此脚本因上述错误而失败:
$computers = Get-Content -path F:\scripts\domain_computers.txt
foreach ($comp in $computers) {
$base = gwmi win32_networkadapterconfiguration -computername $comp | where {$_.dnsdomain -eq "mydomain.com"}
$machine = $base.DNSHostName
$mac = $base.MACAddress
$ip = $base.IPAddress
Write-Output "<$comp>`n`tname = $machine'n</$comp>" | Out-File F:\scripts\comp_list_test.txt -Append
}
write-ouput
仅用于测试。我想在工作后打印所有变量。我错过了什么?
编辑:
文本文件domain_computers.txt将每个计算机名称放在一个单独的行上。没有空格或尾随字符。 我还发现脚本运行正常。在未启用WinRM的计算机上失败了。当我在个人计算机上进行测试时,我碰巧测试了启用了WinRM的计算机。
我现在对此脚本有另一个问题,但会将其发布在一个新问题中,因为它与此无关。
答案 0 :(得分:0)
domain_computers.txt 是否包含以逗号分隔的列表?如果您只获得一个错误,而不是循环的每次迭代的错误,则听起来该文件被读取为单个字符串,这意味着它没有换行符。将每个计算机名称放在单独的行上,或将内容拆分为如下数组:
$computers = (Get-Content -path F:\scripts\domain_computers.txt) -split ','
如果逗号后面有空格,请使用-split ', '
;如果他们只是用空格分隔,请使用-split ' '
。
答案 1 :(得分:0)
我发现脚本运行正常。在未启用WinRM的计算机上失败了。当我在个人计算机上进行测试时,我碰巧测试了启用了WinRM的计算机。