我想在每台服务器(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>}
但是我不知道如何正确处理
答案 0 :(得分:1)
使用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"
}
}