Get-sqmDiskPartitionMap Configuration

Maps physical disks to their logical drive letters by traversing the WMI CIM association chain Win32_DiskDrive → Win32_DiskDriveToDiskPartition → Win32_DiskPartition → Win32_LogicalDiskToPartition → Win32_LogicalDisk. Works locally and remotely via CIM/DCOM (no WinRM). Pipeline-capable on ComputerName. Detects shared physical disks (multiple drive letters).

Execution Flow

START foreach $computer in $ComputerName [pipeline; aliases: SqlInstance, ServerName] isLocal? $cimParams = CIM/DCOM NO CIM association chain Get-CimInstance Win32_DiskDrive ($disks) Get-CimAssociatedInstance -ResultClassName Win32_DiskPartition ($partitions) Get-CimAssociatedInstance -ResultClassName Win32_LogicalDisk ($logicals) Build $partId→letters[] lookup hashtable Build $diskId→letters[] lookup (all partitions of disk) IsShared = DriveLetters.Count > 1 foreach $disk in $disks Build result: DiskIndex, Model, Serial, SizeGB, PartitionCount, DriveLetters[], IsShared MediaType, InterfaceType, ComputerName -NoClipboard? skip YES $diskResults | ConvertTo-Json | Set-Clipboard Return $allResults[] DONE

Synopsis

Traverses the WMI CIM class association chain to determine which drive letters belong to each physical disk. This is the only reliable way to detect that, for example, D: and E: reside on the same physical LUN on a SAN — a configuration where a single disk extension would affect both volumes. Remote queries use CIM/DCOM and do not require WinRM.

Win32_DiskDrive → [Win32_DiskDriveToDiskPartition] → Win32_DiskPartition → [Win32_LogicalDiskToPartition] → Win32_LogicalDisk
No dbatools required. Remote connections via CIM-Instance with DCOM (no WinRM). Use the aliases -SqlInstance or -ServerName instead of -ComputerName when working within the sqmSQLTool pipeline.

Syntax

Get-sqmDiskPartitionMap
    [-ComputerName <String[]>]    # pipeline; aliases: SqlInstance, ServerName
    [-NoClipboard]
    [-EnableException]

Parameters

ParameterTypeDefaultDescription
-ComputerNameString[]$env:COMPUTERNAMETarget computer(s). Pipeline-capable. Also accepts -SqlInstance and -ServerName as aliases.
-NoClipboardSwitchfalseSuppress copying the result to the clipboard.
-EnableExceptionSwitchfalseThrow terminating exceptions.

Return Value

Array of [PSCustomObject] — one entry per physical disk per computer:

PropertyDescription
ComputerNameSource computer.
DiskIndexPhysical disk index (Win32_DiskDrive.Index).
ModelDisk model string.
SerialNumberPhysical disk serial number.
SizeGBTotal disk size in GB.
PartitionCountNumber of partitions on this disk.
DriveLettersArray of drive letters on this disk (e.g. ["D","E"]).
IsSharedBoolean — true if more than one drive letter is on this physical disk.
MediaTypeFixed / Removable / Unknown.
InterfaceTypeSCSI / IDE / USB / etc.

Examples

# Map all physical disks on the local machine
Get-sqmDiskPartitionMap

# Show shared disks only
Get-sqmDiskPartitionMap | Where-Object IsShared

# Remote query via CIM/DCOM (no WinRM needed)
Get-sqmDiskPartitionMap -ComputerName "SQL01","SQL02"

# Pipeline from SqlInstance alias
"SQL01","SQL02" | Get-sqmDiskPartitionMap -NoClipboard