# encoding: ascii # api: powershell # title: Split-TextToLines Demo # description: ESXi virtual machine VLAN check on two NIC configuration ESXi server. # version: 0.1 # type: script # author: Bernd Kriszio # license: CC0 # x-poshcode-id: 3201 # x-derived-from-id: 3202 # x-archived: 2016-06-08T10:19:59 # x-published: 2012-02-04T10:20:00 # # # Variables $viserver = Read-Host "Enter VI server name" $cluster = Read-Host "Enter Cluster name" $vmhelper = Read-Host "Enter VM_HELPER name" Write-Host "Connecting to $viserver..." Connect-VIServer $viserver -WarningAction:SilentlyContinue # Get VM Hosts $vmhosts = Get-Cluster $cluster -ErrorAction:SilentlyContinue | Get-VMHost | where {$_.powerstate -eq "poweredon"} | sort name If ($vmhosts -eq $null) { Write-Host "Invalid cluster name" break } $vmhosts | select name Write-Host "Listed servers will be tested for virtual machine VLAN" Write-Host "Verify that $cluster cluster is NOT A PRODUCTION cluster" Write-Host "Press Any Key to Continue..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") Write-Host # Get VM IP Write-Host "Getting VM IP(s) from $vmehlper virtual machine VLAN...." $vm = Get-VM $vmhelper -ErrorAction:SilentlyContinue if ($vm -eq $null) { Write-Host "Invalid VM name" break } $vm.guest.nics | select NetworkName, IPAddress $answer = Read-host "Do you want to continue with current IP address? (yes/no)" # Start VLAN Ping if ($answer -eq "yes") { $vm.guest.nics | foreach { $vmnic = $_ $pingfile = "c:\scripts\"+ $vmnic.networkname + ".cmd" $pingcmd = "ping -t " + $vmnic.IPAddress Add-Content $pingfile $pingcmd Start-Process $pingfile } # Prep Vmotion by moving VM to last host Write-Host "Moving $vmhelper to " ($vmhosts| select -last 1) "..." Move-VM -VM $vmhelper -Destination ($vmhosts | select -last 1) -Confirm:$false -ErrorAction:SilentlyContinue | Out-Null # Start Vmotion on two pass-thru NIC Foreach ($vmhost in $vmhosts) { Write-Host "Moving $vmhelper to $vmhost... Check continuous ping" Move-VM -VM $vmhelper -Destination $vmhost -Confirm:$false -ErrorAction:SilentlyContinue | Out-Null if (($vmhost | Get-VM $vmhelper) -eq $nul) { Write-Host "Vmotion to $vmhost failed. Check settings" break } } # Remove vmnic1 from vSiwtch0 Foreach ($vmhost in $vmhosts) { $vSwitch = $vmhost | Get-VirtualSwitch | Where-Object {$_.Name -eq "vSwitch0"} Write-Host "Removing vmnic1 from $vmhost..." $vSwitch | Set-VirtualSwitch -Nic vmnic0 -Confirm:$false | Out-Null } sleep 10 # Start Vmotion on two pass-thru NIC Foreach ($vmhost in $vmhosts) { Write-Host "Moving $vmhelper to $vmhost... Check continuous ping" Move-VM -VM $vmhelper -Destination $vmhost -Confirm:$false -ErrorAction:SilentlyContinue | Out-Null if (($vmhost | Get-VM $vmhelper) -eq $null) { Write-Host "Vmotion to $vmhost failed. Check settings" break } } # Remove vmnic0 from vSiwtch0 Foreach ($vmhost in $vmhosts) { $vSwitch = $vmhost | Get-VirtualSwitch | Where-Object {$_.Name -eq "vSwitch0"} Write-Host "Removing vmnic0 from $vmhost..." $vSwitch | Set-VirtualSwitch -Nic vmnic1 -Confirm:$false | Out-Null } sleep 10 Foreach ($vmhost in $vmhosts) { Write-Host "Moving $vmhelper to $vmhost... Check continuous ping" Move-VM -VM $vmhelper -Destination $vmhost -Confirm:$false -ErrorAction:SilentlyContinue | Out-Null } # Add vmnic0 and vmnic1 back to vSwitch0 Write-Host "Re-Adding vmnic0 and vmnic1 to vSwitch0..." Foreach ($vmhost in $vmhosts) { $vSwitch = $vmhost | Get-VirtualSwitch | Where-Object {$_.Name -eq "vSwitch0"} Write-Host "Adding vmnic0, vmnic1 on $vmhost..." $vSwitch | Set-VirtualSwitch -Nic vmnic0,vmnic1 -Confirm:$false | Out-Null } $vm.guest.nics | foreach { $vmnic = $_ $pingfile = "c:\scripts\"+ $vmnic.networkname + ".cmd" del $pingfile } Write-Host "Test is completed." }