VMware PowerCLI – Set Path Selection Policy on all LUNs for a host
This article is now 10 years old! It is highly likely that this information is out of date and the author will have completely forgotten about it. Please take care when following any guidance to ensure you have up-to-date recommendations.
Just a quick script to set the Path Selection Policy on any LUNs on a host that do not have your target policy enabled. The script sets the server to Maintenance mode first, evacuating any VMs if you are in a full DRS automated environment. While this is not strictly necessary, it was required for my production environment just to be safe.
param( [string] $vCenterServer = $(Read-Host -prompt "Enter vCenter Server Name"), [string] $TargetPolicy = $(Read-Host -Prompt "Enter target policy (RoundRobin, Fixed or MostRecentlyUsed)"), [string] $TargetHost = $(Read-Host -Prompt "Enter target Host"), [switch] $WhatIf) # Add the VI-Snapin if it isn't loaded already if ((Get-PSSnapin -Name "VMware.VimAutomation.Core" -ErrorAction SilentlyContinue) -eq $null ) {Add-PSSnapin -Name "VMware.VimAutomation.Core"} Connect-VIServer $vCenterServer | out-null Write-Host "Connected to: " $vCenterServer -ForegroundColor Green Write-Host "Target PSP: " $TargetPolicy -ForegroundColor Yellow Write-Host switch ($TargetPolicy) { RoundRobin { $DisplayPolicy = "VMW_PSP_RR"; } MostRecentlyUsed { $DisplayPolicy = "VMW_PSP_MRU"; } Fixed { $DisplayPolicy = "VMW_PSP_FIXED"; } default { Write-Warning "Unknown PSP selected! Please consult the help and try again."; exit } } Write-Host "Setting Policy to"$TargetPolicy" on "$TargetHost -ForegroundColor Green if($WhatIf) { $vHost = Get-VMHost -Name $TargetHost $vHost | Set-VMHost -State Maintenance -Evacuate -WhatIf $vHost | Get-ScsiLun -LunType "disk" -ErrorAction SilentlyContinue | where {$_.IsLocal -eq $false -and $_.MultipathPolicy -ne $TargetPolicy} | Set-ScsiLun -MultipathPolicy $TargetPolicy -WhatIf $vHost | Set-VMHost -State Connected -WhatIf } else { $vHost = Get-VMHost -Name $TargetHost Write-Host "Setting "$TargetHost" to Maintenance Mode" -ForegroundColor White $vHost | Set-VMHost -State Maintenance -Evacuate $vHost | Get-ScsiLun -LunType "disk" -ErrorAction SilentlyContinue | where {$_.IsLocal -eq $false -and $_.MultipathPolicy -ne $TargetPolicy} | Set-ScsiLun -MultipathPolicy $TargetPolicy Write-Host "Exiting Maintenance mode on"$TargetHost -ForegroundColor White $vHost | Set-VMHost -State Connected }