#PURPOSE: SET ODD LUN's PREFERRED PATH TO vmhba1 AND EVEN LUN's PREFERRED PATH TO vmhba2 # AND SET THE POLICY TO FIXED #FORCE TO LOAD VMWARE POWERSHELL PLUGIN [Reflection.Assembly]::LoadWithPartialName("vmware.vim") #ON ERROR CONTINUE $erroractionpreference = "SilentlyContinue" #VARIABLES $policy = new-object VMware.Vim.HostMultipathInfoFixedLogicalUnitPolicy $policy.policy = "fixed" $UNEVEN = "vmhba1" $EVEN = "vmhba2" $VCHOST = "localhost" #CONNECT TO THE SERVER Get-viserver -Server $VCHOST #GET ALL THE ESX HOST $ALL_ESXHOSTS = get-vmhost | where { $_.State -eq "Connected" } # LOOP THROUGH THE ARRAY foreach ($i in $ALL_ESXHOSTS) { $ESXHOST = $i.name Get-VMhost $ESXHOST #ERROR HANDLING if (! $?) { write-host "ERROR CONNECTING TO HOST: $ESXHOST [ERROR]" -ForeGroundColor Red } else { write-host "CONNECTED TO HOST: $ESXHOST [OK]" -ForegroundColor Green } #GET THE STORAGE PATHS $GET_HOST = Get-VMhost $ESXHOST $HOST_VIEW = Get-View $GET_HOST.id $STORAGESYSTEM = get-view $HOST_VIEW.ConfigManager.StorageSystem #LOOP THROUGH THE LUN'S ADD THEM TO THE ARRAY $ARRLUN = $STORAGESYSTEM.StorageDeviceInfo.MultipathInfo.lun | where { $_.Path.length -gt 1 } if ( $ARRLUN -eq $null ) { write-host "ESXHOST: $ESXHOST HAS NO LUNS [ERROR]" -ForeGroundColor Red } else { #LOOP THROUGH LUN's foreach ($LUN in $ARRLUN) #CHECK IF THE LUN IS EVEN OR UNEVEN AND SET THE POLICY { $CHECK_LUN = $LUN.id.split(':') $CHECK_LUNID = $CHECK_LUN[2] if($CHECK_LUNID -band 1) { Write-Host LUN: $LUN.id = "ODD LUN NUMBER" -ForegroundColor Blue #GET THE PROPER VMHBA $GET_VMHBA = $LUN.Path | where {$_.Name -match $UNEVEN} $policy.prefer = $GET_VMHBA.Name #SET THE NEW PATH + POLICY $NEW = "NEW PATH FOR LUN:" + " " + $LUN.id + " " + "IS:" + " " + $policy.prefer $storageSystem.SetMultipathLunPolicy($LUN.id, $policy) #ERROR HANDLING if (! $?) { write-host $NEW "[ERROR]" -ForegroundColor Red } else { write-host $NEW "[OK]" -ForegroundColor Green } } else { Write-Host LUN: $LUN.id = "EVEN LUN NUMBER" -ForegroundColor Blue #GET THE PROPER VMHBA $GET_VMHBA = $LUN.Path | where {$_.Name -match $EVEN} $policy.prefer = $GET_VMHBA.Name #SET THE NEW PATH + POLICY $NEW = "NEW PATH FOR LUN:" + " " + $LUN.id + " " + "IS:" + " " + $policy.prefer $storageSystem.SetMultipathLunPolicy($LUN.id, $policy) #ERROR HANDLING if (! $?) { write-host $NEW "[ERROR]" -ForegroundColor Red } else { write-host $NEW "[OK]" -ForegroundColor Green } } } } }