0

我正在尝试使用 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 的计算机上进行了测试。

我现在对此脚本有另一个问题,但会将其发布在一个新问题中,因为它与此无关。

4

2 回答 2

0

domain_computers.txt是否包含逗号分隔的列表?如果您只收到一个错误,而不是循环的每次迭代都出现错误,那么听起来文件被作为单个字符串读取,这意味着它没有换行符。要么将每个计算机名称放在单独的行上,要么将内容拆分为这样的数组:

$computers = (Get-Content -path F:\scripts\domain_computers.txt) -split ','

如果-split ', '逗号后面有空格,或者-split ' '它们只是用空格分隔,则使用。

于 2013-07-14T00:06:45.797 回答
0

我发现脚本工作正常。它在没有启用 WinRM 的机器上失败。当我在单个计算机上进行测试时,我只是碰巧在那些启用了 WinRM 的计算机上进行了测试。

于 2013-07-18T18:53:05.253 回答