Kevin
Kevin

Reputation: 193

Formating List Problems in Powershell

I want to execute a few lines of code on every Server (160+). For this I decided to get my Serverlist via Powercli and pass this list to 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"
    }
}

the problem seems to be, that it takes an array as the ouput error is following

Error on @{Name=<$server>}

But I dont know how to handle this correctly

Upvotes: 0

Views: 23

Answers (1)

Sid
Sid

Reputation: 2676

Use New-Pssession or Invoke-command for remoting. Enter-Pssession is interactive and the way you are doing it, the get-netipaddress is running on your local machine and not on your remote machine.

Use $servers.Name instead of $servers in your foreach loop.

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"
    }
}

Upvotes: 1

Related Questions