2013-07-05 2 views
0

Я пытаюсь использовать WMI, чтобы получить имя хоста, IP и MAC-адрес со всех компьютеров в домене и сохранить их в текстовом файле. Когда я запускаю мой код, я получаю следующее сообщение об ошибке:Powershell - читать список и выводить содержимое gwmi для разделения файла

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 только для тестирования. Я хотел бы напечатать все переменные после работы. Что мне не хватает?

EDIT:

Текстовый файл domain_computers.txt имеет каждый имя_компьютера на отдельной строке. Нет пробелов или символов конца. Я также понял, что скрипт работает правильно. Он не работал на машинах, у которых не было включен WinRM. Когда я тестировал отдельные компьютеры, мне просто приходилось тестировать те, на которых был включен WinRM.

У меня теперь есть еще одна проблема с этим скриптом, но опубликуйте его в новом вопросе, поскольку он не связан с этим.

+0

Это, вероятно, лучший вопрос для http://serverfault.com – Mgetz

+0

Есть ли способ перенести этот вопрос или я должен просто задать новый вопрос? – mipnix

+0

Я укажу его для миграции – Mgetz

ответ

0

Я понял, что скрипт работает правильно. Он не работал на машинах, у которых не было включен WinRM. Когда я тестировал отдельные компьютеры, мне просто приходилось тестировать те, на которых был включен WinRM.

+0

Это была моя первая мысль, но если это так, вы получаете ошибку несколько раз (один раз для каждого компьютера, на котором не работает WinRM), и ваше описание подразумевает, что вы получаете только одну ошибку. Вот почему я догадался, что gwmi может пытаться получить доступ к одному несуществующему компьютеру, чье имя является агломерацией имен всех компьютеров. Вы должны быть более полными в своих описаниях. ;) –

0

domain_computers.txt, если у вас есть список, разделенный запятой? Если вы получаете только одну ошибку, а не ошибку для каждой итерации цикла, это звучит так, как будто файл читается как одна строка, что означает, что он не имеет разрывов строк. Либо поместить каждое имя компьютера на отдельной строке, или разделить содержимое в массив как это:

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

Используйте -split ', ', если есть пробелы после запятых или -split ' ', если они просто разделены пробелами.

Смежные вопросы