### -----------------------------------------------------------------
### Written by Matt Brown
###
### Description: Test VMWare Host Networks
###
### Requires:
### VMWare Snapin
### Test VM with a Local Admin Account, may need to turn UAC Off
### CSV File with Network Info
###
### Sample CSV File:
### Name,VLanId,ip,netmask,gateway
### VM-Subnet01,21,192.168.3.5,255.255.255.0,192.168.3.1
### VM-Subnet02,22,192.168.4.5,255.255.255.0,192.168.3.5
### -----------------------------------------------------------------
## Load VMWare Snapin
if(-not (Get-PSSnapin | where { $_.Name -match 'VMware.VimAutomation.Core' })) {
Add-PSsnapin VMware.VimAutomation.Core
}
## Vars to Configure
$vCenterServer = "VC.domain.com"
$clusterToTest = "ProductionCluster"
$TestMachine = "TestVM"
$vmnicname = "Local Area Connection"
$NetworkListFile = "VMNetworkTestList.csv"
function TestNetwork($currenthost,$newhost,$vm,$gateway,$guestCred) {
if($currenthost -notmatch $newhost) {
Write-Host ("Moving $TestMachine to " + $_.Name) -ForegroundColor Cyan
$VM | Move-VM -Destination $_.Name | Out-Null
}
$script = ("ping " + $gateway)
Write-Host $script -ForegroundColor Yellow
$pingtest = Invoke-VMScript -VM $vm -ScriptText $script -scriptType bat -Credential $guestCred
if($pingtest.ScriptOutput -match "(0% loss)") { Write-Host "Test Success" -ForegroundColor Green } else { $pingtest.ScriptOutput }
#$continue = Read-Host "Hit Enter to Test on Next Host."
return $newhost
}
## Connect to vCenter and grab information
Connect-VIServer -Server $vCenterServer -credential (Get-Credential -Message ("vCenter Account"))
$hosts = Get-VMHost -Location $clusterToTest | select Name
$VM = get-vm -name $TestMachine
$currenthost = $vm.VMHost.Name
$guestCred = Get-Credential -UserName ($TestMachine + "\") -Message "Local Admin Account"
$NetworksToTest = Import-Csv $NetworkListFile
$NetworksToTest | foreach {
$NetworkName = $_.Name
$IP = $_.ip
$gateway = $_.gateway
$netmask = $_.netmask
Write-Host "Changing Network on $TestMachine to $NetworkName" -ForegroundColor Cyan
Get-NetworkAdapter -VM $vm | Set-NetworkAdapter -NetworkName $NetworkName -Confirm:$false | Out-Null
#$continue = Read-Host "Hit Enter to Set the IP Address."
Write-Host "Changing IP Address on $TestMachine to $IP" -ForegroundColor Cyan
$VM | Get-VMGuestNetworkInterface -GuestCredential $guestCred | Where-Object { $_.Name -eq $vmnicname } | Set-VMGuestNetworkInterface -GuestCredential $guestCred -Ip $IP -Netmask $netmask -Gateway $gateway | Out-Null
#$continue = Read-Host "Hit Enter to Run Ping Tests."
$x = @()
$hosts | where { $_ -notmatch $currenthost } | foreach { $x += $_.Name }
$currenthost = TestNetwork $currenthost $currenthost $vm $gateway $guestCred
$hosts | foreach {
$currenthost = TestNetwork $currenthost $_ $vm $gateway $guestCred
}
}
Ramblings from University IT... VMWare, NetApp, Powershell,Active Directory, Exchange and Scripting.
Friday, November 7, 2014
Powershell: Test VMWare Host Networks
Here's a handy script I use to verify networks on my VMWare Clusters. This script takes a test VM and changes the Network and IP Address from a list, then does a simple ping from the VM on each host to let you know your networks are working correctly before moving Production Machines to it. The need for this spawned from a missing "allowed vLan id" not being configured across the ether channel ports on one of the hosts.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment