我正在使用 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 在作業系統端設定了靜態 IP 位址。如果我啟動 $Cloned_VM,我將在同一子網路上擁有重複的 IP。我想做的是在啟動此虛擬機器之前斷開克隆虛擬機器上的網卡。
我發現的是:
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
這也有效,但不完全是我想要的。
我想斷開目前的網路卡以啟動複製的虛擬機,更改 IP 位址,然後連接網路卡(+重新啟動)以使複製的虛擬機使用另一個 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 環境中看到:)