Формирование списка проблем в Powershell - PullRequest
0 голосов
/ 04 июля 2019

Я хочу выполнить несколько строк кода на каждом сервере (160+). Для этого я решил получить свой список серверов через Powercli и передать этот список на Enter-PSSession.

...
Connect-VIServer -Server $VIServer -Credential $creds
$servers = Get-VM |select Name |where Name -Like "SV*"
...

foreach($server in $servers)
{
    try{
        Enter-PSSession -ComputerName $server -Credential $cred -ErrorAction Stop
            Get-NetIPAddress |where AddressFamily -EQ 2 |where InterfaceAlias -Like "Ethernet" |select IPAddress
        Exit-PSSession
    }catch{
        Write-Host "Error on $server"
    }
}

проблема, кажется, в том, что он принимает массив, поскольку ошибка вывода следующая

Error on @{Name=<$server>}

Но я не знаю, как с этим справиться

1 Ответ

1 голос
/ 04 июля 2019

Используйте New-Pssession или Invoke-command для удаленного взаимодействия.Enter-Pssession интерактивен и, как вы делаете, get-netipaddress работает на вашем локальном компьютере, а не на удаленном компьютере.

Используйте $servers.Name вместо $servers в вашем foreachпетля.

foreach($server in $servers.Name) #This .name should fix your problem
{
    try{
        New-PSSession -ComputerName $server -Credential $cred -ErrorAction Stop -Name MySession
        Invoke-Command -Session $MySession -ScriptBlock {Get-NetIPAddress |where AddressFamily -EQ 2 |where InterfaceAlias -Like "Ethernet" |select IPAddress}
        Remove-PSSession
    }catch{
        Write-Host "Error on $server"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...