Powershell中的格式列表问题

时间:2019-07-04 08:09:26

标签: powershell

我想在每台服务器(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 个答案:

答案 0 :(得分:1)

使用New-PssessionInvoke-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"
    }
}