【问题标题】:How to get Hard Disk number from drive letter using VBScript如何使用 VBScript 从驱动器号中获取硬盘号
【发布时间】:2011-02-10 10:06:31
【问题描述】:

如何使用VBScript从盘符中获取硬盘号?

提前谢谢你。

【问题讨论】:

  • 硬盘号是指序列号还是其他?
  • 不,我说的不是序列号。我的意思是由 bios 确定的 nuber(名称)

标签: vbscript


【解决方案1】:

Remou 对 WMI 的看法是正确的,只是需要让它变得更混乱一些。如果有更简单/更好的方法来做这件事,一点也不感到惊讶,但是这个脚本至少应该为您提供一个很好的起点来做您需要的事情。

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

【讨论】:

    【解决方案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
    

    【讨论】:

    【解决方案3】:

    这不是确切的答案,但如果有人在 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;
        }
    

    【讨论】:

    • 此问题标记为vbscript 而不是c#,请在相应的主题问题中发布此问题。
    猜你喜欢
    • 2018-05-15
    • 2011-08-06
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多