Option Explicit Const ASSOC = "ASSOCIATORS OF {", ASS_CLASS = "} WHERE AssocClass = " Const WINMGMTS = "winmgmts:{impersonationLevel=impersonate}!root/cimv2" Dim wmiServices, wmiDiskDrives, wmiDiskPartitions, wmiLogicalDisks Dim wmiDiskDrive, wmiDiskPartition, wmiLogicalDisk, QStr, ECHO, Str Set ECHO = WScript.StdOut ECHO.WriteLine Str On Error Resume Next Set wmiServices = GetObject(WINMGMTS) ' physical diskdrives Set wmiDiskDrives = wmiServices.ExecQuery( _ "SELECT Caption, DeviceID FROM Win32_DiskDrive") ' for Each wmiDiskDrive In instances of wmiDiskDrives For Each wmiDiskDrive In wmiServices.InstancesOf("Win32_DiskDrive") WScript.Echo VbCrlf _ & wmiDiskDrive.DeviceID _ & " (" & wmiDiskDrive.Caption & ")" ' get associated partition to diskdrive DeviceID QStr = ASSOC & "Win32_DiskDrive." & "DeviceID=""" & _ Replace(wmiDiskDrive.DeviceID, "\", "\\") & """" & _ ASS_CLASS & "Win32_DiskDriveToDiskPartition" Set wmiDiskPartitions = wmiServices.ExecQuery(QStr) For Each wmiDiskPartition In wmiDiskPartitions ' Get logical disk by partition DeviceID Set wmiLogicalDisks = wmiServices.ExecQuery ( _ ASSOC & "Win32_DiskPartition." & _ "DeviceID=""" & _ wmiDiskPartition.DeviceID & """" & _ ASS_CLASS & "Win32_LogicalDiskToPartition") For Each wmiLogicalDisk In wmiLogicalDisks WScript.Echo " " & _ wmiDiskPartition.DeviceID & " | " _ & "(\Disk" & wmiDiskPartition.DiskIndex + 1 _ & "\Partition" & wmiDiskPartition.Index + 1 _ & ") " _ & wmiLogicalDisk.DeviceID Next Next Next Set wmiServices = Nothing Set wmiDiskPartitions = Nothing Set wmiLogicalDisks = Nothing WScript.Quit