Powershell - 读取列表并将gwmi内容输出到单独的文件

时间:2013-07-05 18:56:56

标签: scripting wmi powershell-v2.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的计算机。

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

2 个答案:

答案 0 :(得分:0)

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

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

如果逗号后面有空格,请使用-split ', ';如果他们只是用空格分隔,请使用-split ' '

答案 1 :(得分:0)

我发现脚本运行正常。在未启用WinRM的计算机上失败了。当我在个人计算机上进行测试时,我碰巧测试了启用了WinRM的计算机。