我正在 Powershell 中创建一个自动构建过程,并且需要构建一个具有静态 IP 地址的 VM。VM 由脚本构建并分配了一个 DHCP IP 地址。我可以查询 Hyper-V 主机以获取新创建的 VM 的 IP 地址,Get-NetAdapter
以便我可以使用Invoke-Command -ComputerName <ip_address>
. 到目前为止一切都很好。然后,我的 powershell 脚本中的下一行更改了远程 VM 的 IP 地址,New-NetIPAddress
但Invoke-Command
cmdlet 会在 4 分钟后超时。
我的问题是,有没有更好的方法来远程更改 IP?我可以设置一个超时并以某种方式优雅地处理它吗?目前它在那里停留了 4 分钟,然后出现连接错误。
编辑:如果我按照 Gerald 的建议更改作业中的 IpAddress,我将如何将参数传递给作业?我当前更改 IP 的代码如下所示:
Invoke-Command -ComputerName $TempIpAddress -Credential $cred -scriptblock {param ($IpAddress, $DefaultGateway) Get-NetIpAddress | Where-Object {$_.InterfaceAlias -match "Ethernet" -and $_.AddressFamily -eq "IPv4"} | New-NetIPAddress –IPAddress $IpAddress –PrefixLength 24 -DefaultGateway $DefaultGateway} -ArgumentList $NewIpAddress, $DefaultGateway
EDIT2:我试过这个,工作被创建但没有做任何事情。当我跑步时,Get-Job
什么都没有返回。
Invoke-Command -ComputerName $TempIpAddress -Credential $cred -scriptblock {Start-Job -ScriptBlock {param ($IpAddress, $DefaultGateway) Get-NetIpAddress | Where-Object {$_.InterfaceAlias -match "Ethernet" -and $_.AddressFamily -eq "IPv4"} | New-NetIPAddress –IPAddress $IpAddress –PrefixLength 24 -DefaultGateway $DefaultGateway} -ArgumentList $NewIpAddress, $DefaultGateway}
我目前无法对此进行测试,但这样的事情应该可以工作:
这应该在后台启动 cmdlet,让您可以正常断开连接。然后,您应该在新的 IP 地址上运行下一个命令。