Posting here as I hope it helps.
I have been faffing with powershell to get from ISCSI Target IQN to Disk.
A bit more coding and I can pull Disk Serial.
A bit more coding and I can match Disk Serial to mpclaim Disk Number.
Now with a bit of extra code its possible programatically
- to set ISCSI Targets with "witness" in their ISCSI IQN to MPIO Policy Failover
- to set ISCSI Targets without to MPIO Policy Least Queue Depth
Code: Select all
# Convert to Hash: MPIO Disk Info
$disks_MPIO = (gwmi -Namespace root\wmi -Class mpio_disk_info).driveinfo | Group-Object SerialNumber -AsHashTable -AsString
$disks_starwind = Get-PhysicalDisk | Where FriendlyName -like "*Starwind*" | Select-Object Friendlyname, UniqueID, @{Name='MPIO Name'; Expression={ ($disks_MPIO[$_.UniqueID]).Name }} | Format-Table -AutoSize
$disks_Serial_vs_ISCSI = Get-IscsiConnection | Select -Property InitiatorAddress,TargetAddress,@{Name='Session'; Expression={($_|Get-IscsiSession).TargetNodeAddress}},@{Name='DiskSerial'; Expression={($_|Get-Disk).SerialNumber}} | Group-Object -Property DiskSerial
# Output For Review
Write-Output ($disks_Serial_vs_ISCSI | Select -ExpandProperty Group )
$disks_Serial_vs_MPIO = @()
foreach($currDisk in $disks_Serial_vs_ISCSI){
$countIsWitness = 0
foreach($currISCSI_Target in $currDisk.Group){
If($currISCSI_Target.Session -like "*witness*"){
++$countIsWitness
}
}
$disks_Serial_vs_MPIO += [pscustomobject]@{
DiskSerial = $currDisk.Name
MPIO_Required = If($countIsWitness -gt 0){"FOO"}Else{"LQD"}
MPIO_DiskNb = ($disks_MPIO[$currDisk.Name]).Name.Replace("MPIO Disk","")
ISCSI_IQN = $currISCSI_Target.Session
}
}
# For Review
Write-Output $disks_Serial_vs_MPIO
# Before Changes
& mpclaim -s -d
foreach($currDisk in $disks_Serial_vs_MPIO){
$ArgumentList = ""
If($currDisk.MPIO_Required -eq "FOO"){
$ArgumentList = "-l -d " + $currDisk.MPIO_DiskNb + " 1”
} Else {
$ArgumentList = "-l -d " + $currDisk.MPIO_DiskNb + " 4”
#mpclaim /?
#0 = Clear the Policy
#1 = Fail-Over Only
#2 = Round Robin
#3 = Round Robin with Subset
#4 = Least Queue Depth
#5 = Weighted Paths
#6 = Least Blocks
#7 = Vendor-Specific
}
Write-Output ("To set MPIO Load Balance Policy")
Write-Output ("`t TO: " + $currDisk.MPIO_Required)
Write-Output ("`t FOR: " + $currDisk.ISCSI_IQN)
Write-Output ("`t RUN: " + "mpclaim $ArgumentList")
#start-process “c:\windows\system32\mpclaim.exe” -ArgumentList $ArgumentList -Wait
}
# After Changes
& mpclaim -s -d