Как получить номер жесткого диска из буквы диска с помощью VBScript - PullRequest
3 голосов
/ 10 февраля 2011

Как получить номер жесткого диска из буквы диска с помощью VBScript?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Рему прав насчет 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 голосов
/ 10 февраля 2011

Как насчет 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
0 голосов
/ 30 апреля 2014

Это не точный ответ, но если кому-то это нужно в 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...