断开已关闭虚拟机上的 NIC

断开已关闭虚拟机上的 NIC

我正在使用 ESXi 6.0 和 PowerCLI。我创建了一个生产虚拟机的克隆:

$Source_VM = Get-VM -Name "MyProductionServer"
$Target_VMHost = Get-VMHost -VM $Source_VM
$Cloned_VM = (New-VM -Name "MyPreProdServer" -VM $Source_VM -VMHost $Target_VMHost)

我的 MyProductionServer 在 OS 端设置了静态 IP 地址。如果我启动 $Cloned_VM,我将在同一子网上获得重复的 IP。我想要做的是在启动此虚拟机之前断开克隆虚拟机上的 NIC。

我发现的是:

1)在已启动的虚拟机上:

Get-NetworkAdapter -VM $Cloned_VM | Set-NetworkAdapter -Connected:$false -StartConnected:$false -Confirm:$false

这是可行的,但是由于克隆的虚拟机的状态,我无法这样做。

2)从虚拟机中移除网卡:

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Remove"
$spec.DeviceChange[0].Device = $Cloned_VM.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq "Network adapter 1"}
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)

来源:https://communities.vmware.com/thread/454525

这也有效,但这不是我想要的。

我想断开当前 NIC 的连接,以便启动克隆的 VM,更改 IP 地址,然后连接 NIC(+ 重新启动)以使克隆的 VM 使用另一个 IP 地址工作。

简单来说,我想在已关闭的虚拟机上执行 1)。可以吗?

答案1

所以我在测试环境中测试了它并且它可以运行。

# Saving the NIC
$Saved_NIC = $Cloned_VM.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq "Network adapter 1"}

# Removing the NIC
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Remove"
$spec.DeviceChange[0].Device = $Saved_NIC
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)

# Modifying my VM (boot + launch script + poweroff)

# Adding the NIC
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Add"
$spec.DeviceChange[0].Device = $Saved_NIC
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)

# Boot again my VM and test to reach the internet: WORKING!
Start-VM -VM $Cloned_VM

看起来还不错,稍后我会在 Pre-Prod 环境中看到它 :)

相关内容