如何使用VBScript从驱动器号获取硬盘编号

时间:2011-02-10 10:06:31

标签: vbscript

如何使用VBScript从驱动器号中获取硬盘编号?

提前谢谢。

3 个答案:

答案 0 :(得分:3)

对于WMI来说,Remou是正确的,只需要让它变得更加混乱。如果有一个更简单/更好的方法,这一点都不会让人感到惊讶,但这个脚本至少应该为你提供一个很好的起点来做你需要的。

Dim query 
Dim objWMI 
Dim diskDrives 
Dim diskDrive 
Dim partitions 
Dim partition ' will contain the drive & partition numbers
Dim logicalDisks 
Dim logicalDisk ' will contain the drive letter

Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set diskDrives = objWMI.ExecQuery("SELECT * FROM Win32_DiskDrive") ' First get out the physical drives
For Each diskDrive In diskDrives 
    query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + diskDrive.DeviceID + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition" ' link the physical drives to the partitions
    Set partitions = objWMI.ExecQuery(query) 
    For Each partition In partitions 
        query = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition.DeviceID + "'} WHERE AssocClass = Win32_LogicalDiskToPartition"  ' link the partitions to the logical disks 
        Set logicalDisks = objWMI.ExecQuery (query) 
        For Each logicalDisk In logicalDisks      
            Wscript.Echo logicalDisk.DeviceID & " - " & partition.Caption
        Next
    Next 
Next 

这将枚举所有驱动器号,并为您提供结果,例如:C: - Disk #2, Partion #0

答案 1 :(得分:2)

WMI怎么样?

strComputer = "." 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_DiskDrive",,48) 
For Each objItem in colItems 
   s = s & "SerialNumber: " & objItem.SerialNumber & vbcrlf 
   s = s & "Model: " & objItem.Model
Next

MsgBox s

答案 2 :(得分:0)

这不是确切的答案,但如果有人在C#中需要它,请使用我刚创建的这个函数

    private string GetDiskIndex(string driveLetter)
    {
        driveLetter = driveLetter.TrimEnd('\\');

        ManagementScope scope = new ManagementScope(@"\root\cimv2");
        var drives = new ManagementObjectSearcher(scope, new ObjectQuery("select * from Win32_DiskDrive")).Get();
        foreach(var drive in drives)
        {

            var partitions = new ManagementObjectSearcher(scope, new ObjectQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition")).Get();
            foreach(var partition in partitions)
            {
                var logicalDisks = new ManagementObjectSearcher(scope, new ObjectQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition["DeviceID"] + "'} WHERE AssocClass = Win32_LogicalDiskToPartition")).Get();
                foreach (var logicalDisk in logicalDisks)
                {
                    if (logicalDisk["DeviceId"].ToString() == driveLetter) return partition["DiskIndex"].ToString();
                }
            }

        }

        return null;
    }
相关问题