電源オフのVMのNICを切断する

電源オフのVMのNICを切断する

ESXi 6.0 と PowerCLI を使用しています。本番 VM のクローンを作成しました。

$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 が存在します。この VM を起動する前に、クローン VM の NIC を切断したいと考えています。

私が見つけたのは次のことです:

1) 電源がオンになっている VM の場合:

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

これは機能していますが、クローンされた VM の状態が原因で実行できません。

2) VM から NIC を削除します。

$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) を電源オフの VM で実行したいのですが、それは可能ですか?

答え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 環境で確認してみます :)

関連情報