2017-02-13 9 views
-2

Я пытаюсь получить этот скрипт для получения внешнего IP-адреса нескольких компьютеров в моей сети. Пока что сценарий, по-видимому, проходит через цикл, но запускает команду на моей локальной машине, а не удаленную в цикле.Скрипт Powershell для получения внешнего IP-адреса из списка компьютеров

$computers = get-content "c:\scripts\scriptdev\Addresses.txt" 
$outfile ="c:\scripts\scriptdev\test2.csv" 

$results = @() 
foreach ($computer in $computers) 
{ 
Invoke-RestMethod http://ipinfo.io/json | Select -exp ip $computer 
Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name $computer 
} 
+0

Непонятно. Вы никогда не «просили» каких-либо командлетов выполнять удаленно ... '$ results' и' $ outfile' никогда не используются. Вы ввели '$ computer' в качестве имени столбца для' Select-Object', который заставил бы его генерировать объекты, у которых есть свои собственные свойства (а не только значения). –

+0

* внешний IP-адрес нескольких компьютеров в моей сети * - если вы не точно знаете, что настроено просто в вашей сети, нет определенного отдельного внешнего IP-адреса для компьютера. Существует много причин, по которым может быть более одного внешнего IP-адреса: несколько соединений WAN, разные политики в зависимости от того, кто зарегистрировался или время суток, разная маршрутизация для разных протоколов, несколько IP-адресов для разных входящих служб (HTTPS, SSH). – TessellatingHeckler

ответ

2

Чтобы указать удаленное выполнение, вам необходимо использовать командлет или параметр. $computer сам по себе является просто переменной со строковым значением.

Некоторые командлеты поддерживают параметр -ComputerName $computer, в то время как другие, такие как Invoke-RestMethod, требуют, чтобы вы запускали их с помощью Invoke-Command или чего-то подобного.

Ex.

$computers = get-content "c:\scripts\scriptdev\Addresses.txt" 
$results = @() 

foreach ($computer in $computers) 
{ 
    $results += Invoke-Command -HideComputerName -ComputerName $computer -ScriptBlock { 
     New-Object -TypeName psobject -Property @{ 
      Name = Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name 
      ExternalIP = Invoke-RestMethod http://ipinfo.io/json | Select -ExpandProperty ip 
     } 
    } 
} 

$results 
+0

Спасибо, это очень помогает. Вы знаете, как я могу удалить область runpaceid, которую это создает? –

+0

'$ Результаты | Select-Object Name, ExternalIP' –

+0

Не забывайте отмечать как ответ, если это решило ваш вопрос, поэтому вопрос будет отмечен как закрытый. –