当你这样做时:
Invoke-Command -Session $RemoteSession -ScriptBlock {
$RsTestResults = New-Object System.Net.Sockets.TcpClient -ArgumentList 2ndRemoteVM, 2ndRemoteVMPort
}
变量$RsTestResults 正在远程主机上创建,其范围将被称为主机。如果您希望将System.Net.Sockets.TcpClient 的结果存储在本地主机上,则需要将Invoke-Command 的结果存储如下:
$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock {
New-Object System.Net.Sockets.TcpClient -ArgumentList 2ndRemoteVM, 2ndRemoteVMPort
}
编辑
解释您收到的错误消息:
PS > New-Object System.Net.Sockets.TcpClient -ArgumentList $null, $null
New-Object : Exception calling ".ctor" with "2" argument(s): "The requested address is not valid in its context xxx.xxx.xxx.xxx:0"
这意味着IPAddress 和Port 的变量永远不会传递给Invoke-Command。
您有两个选项可以将这些变量传递给 cmdlet,一个是 $using:variableName,另一个是 -ArgumentList。
假设您有 2 个局部变量,例如:
$ipAddress = $csv.IPAddress
$port = $csv.Port
$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock {
New-Object System.Net.Sockets.TcpClient -ArgumentList $using:ipAddress, $using:port
}
$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock {
param($ipAddress, $port)
New-Object System.Net.Sockets.TcpClient -ArgumentList $ipAddress, $port
} -ArgumentList $ipAddress, $port