Code:
$vCenterIP ="vc.vmzoneblog.com" Connect-VIServer $vCenterIP $myDatacenter ="nukescloud" $Cluster ="sgp" $NewDVS ="DSwitch" $NicName ="vmnic4" $UplinkName="Uplink 4" $hostnames=Get-Datacenter -Name $myDatacenter | Get-Cluster -Name $Cluster | Get-VMHost $hostnames=$hostnames.name ForEach ($hostname in $hostnames) { Write-Host -ForegroundColor red "The $hostname already has 1 or more physical Nics on $NewDVS" $EsxHost = Get-VMHost -Name $hostname $vds = Get-VDSwitch -Name $NewDVS -VMHost $EsxHost $uplinks = Get-VDPort -VDSwitch $vds -Uplink | where {$_.ProxyHost -like $hostname} $config = New-Object VMware.Vim.HostNetworkConfig $config.ProxySwitch = New-Object VMware.Vim.HostProxySwitchConfig[] (1) $config.ProxySwitch[0] = New-Object VMware.Vim.HostProxySwitchConfig $config.ProxySwitch[0].Uuid = $vds.ExtensionData.Uuid $config.ProxySwitch[0].ChangeOperation = 'edit' $config.ProxySwitch[0].Spec = New-Object VMware.Vim.HostProxySwitchSpec $config.ProxySwitch[0].Spec.Backing = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicBacking $config.ProxySwitch[0].Spec.Backing.PnicSpec = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec[] (2) $config.ProxySwitch[0].Spec.Backing.PnicSpec[0] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec $config.ProxySwitch[0].Spec.Backing.PnicSpec[0].PnicDevice = $NicName $config.ProxySwitch[0].Spec.Backing.PnicSpec[0].UplinkPortKey = $uplinks | where{$_.Name -eq $UplinkName} | Select -ExpandProperty Key $config.ProxySwitch[0].Spec.Backing.PnicSpec[1] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec $config.ProxySwitch[0].Spec.Backing.PnicSpec[1].PnicDevice = $uplink.ConnectedEntity | Where-Object {$_.ConnectedEntity.Name -like "vmnic*"} $config.ProxySwitch[0].Spec.Backing.PnicSpec[1].UplinkPortKey = $uplink.Key | Where-Object {$_.ConnectedEntity.Name -like "vmnic*"} $changeMode = 'modify' $netSys = Get-View -Id $EsxHost.ExtensionData.ConfigManager.NetworkSystem $netSys.UpdateNetworkConfig($config, $changeMode) Write-Host -ForegroundColor Green "Moved $NicName for $hostname to $NewDVS $UplinkName" } Disconnect-viserver -confirm:$false
Error:
Exception calling "UpdateNetworkConfig" with "2" argument(s): "There is an error in the XML document." At line:32 char:1 + $netSys.UpdateNetworkConfig($config, $changeMode) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidOperationException
Does this makes any difference?
$vCenterIP =”vc.vmzoneblog.com”
Connect-VIServer $vCenterIP
$myDatacenter =”nukescloud”
$Cluster =”sgp”
$NewDVS =”DSwitch”
$NicName =”vmnic4″
$UplinkName=”Uplink 4″
$hostnames=Get-Datacenter -Name $myDatacenter | Get-Cluster -Name $Cluster | Get-VMHost
$hostnames=$hostnames.name
ForEach ($hostname in $hostnames)
{
Write-Host -ForegroundColor red “The $hostname already has 1 or more physical Nics on $NewDVS”
$EsxHost = Get-VMHost -Name $hostname
$vds = Get-VDSwitch -Name $NewDVS -VMHost $EsxHost
$uplinks = Get-VDPort -VDSwitch $vds -Uplink | where {$_.ProxyHost -like $hostname}
$netSys = Get-View -Id $EsxHost.ExtensionData.ConfigManager.NetworkSystem
$config = New-Object VMware.Vim.HostNetworkConfig
$config.ProxySwitch = New-Object VMware.Vim.HostProxySwitchConfig[] (1)
$config.ProxySwitch[0] = New-Object VMware.Vim.HostProxySwitchConfig
$config.ProxySwitch[0].Uuid = $vds.ExtensionData.Uuid
$config.ProxySwitch[0].ChangeOperation = [VMware.Vim.HostConfigChangeOperation]::edit
$config.ProxySwitch[0].Spec = New-Object VMware.Vim.HostProxySwitchSpec
$config.ProxySwitch[0].Spec.Backing = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicBacking
$config.ProxySwitch[0].Spec.Backing.PnicSpec = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec[] (2)
$config.ProxySwitch[0].Spec.Backing.PnicSpec[0] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec
$config.ProxySwitch[0].Spec.Backing.PnicSpec[0].PnicDevice = $NicName
$config.ProxySwitch[0].Spec.Backing.PnicSpec[0].UplinkPortKey = $uplinks | where{$_.Name -eq $UplinkName} | Select -ExpandProperty Key
$config.ProxySwitch[0].Spec.Backing.PnicSpec[1] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec
$config.ProxySwitch[0].Spec.Backing.PnicSpec[1].PnicDevice = $uplink.ConnectedEntity | Where-Object {$_.ConnectedEntity.Name -like “vmnic*”}
$config.ProxySwitch[0].Spec.Backing.PnicSpec[1].UplinkPortKey = $uplink.Key | Where-Object {$_.ConnectedEntity.Name -like “vmnic*”}
$changeMode = [VMware.Vim.HostConfigChangeMode]::modify
$netSys.UpdateNetworkConfig($config, $changeMode)
Write-Host -ForegroundColor Green “Moved $NicName for $hostname to $NewDVS $UplinkName”
}
Disconnect-viserver -confirm:$false
Setting as $changeMode = [VMware.Vim.HostConfigChangeMode]::modify makes no difference
Found a Fix. The lines 28,29 had incorrect syntax correct code below
$config.ProxySwitch[0].Spec.Backing.PnicSpec[1].PnicDevice = ($uplinks| Where-Object {$_.ConnectedEntity.Name -like “vmnic*”}).ConnectedEntity
$config.ProxySwitch[0].Spec.Backing.PnicSpec[1].UplinkPortKey = ($uplinks| Where-Object {$_.ConnectedEntity.Name -like “vmnic*”}).Key