![如何使用 Powershell 更改远程 VM 的 IP 地址?](https://linux22.com/image/694835/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Powershell%20%E6%9B%B4%E6%94%B9%E8%BF%9C%E7%A8%8B%20VM%20%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我正在 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
编辑2:我试过了,任务创建了,但是什么都没做。而且我运行时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}
答案1
我目前无法测试这一点,但这样的事情应该可以工作:
Invoke-Command -ComputerName <ip_address> -ScriptBlock { Start-Job -ScriptBlock { New-NetIPAddress ... } }
这应该会在后台启动 cmdlet,让您可以正常断开连接。然后您应该在新的 IP 地址上运行下一个命令。