2011-02-10 9 views
3

VBScriptを使用してドライブ文字からハードディスク番号を取得する方法?VBScriptを使用してドライブ文字からハードディスク番号を取得する方法

ありがとうございます。

+0

"ハードディスク番号"とは、シリアル番号などを意味しますか? – Helen

+0

いいえ、私はシリアル番号を意味しません。私はbiosによって決定されるヌーベル(指定)を意味します –

答えて

3

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 
+0

このスクリプトは、ハードディスクのシリアル番号を取得します。私は、BIOSによって決定される番号を取得する必要があります。ディスク管理メニューでこの番号を見ることができます。 –

+0

おっと、私はそれがあなたが言ったことだと思った、再読書、私はそうではないと思う。 – Fionnuala

+0

WMIは多くの情報を返します(http://www.computerperformance.co.uk/vbscript/wmi_disks_physical.htm)。コード作成者http://www.robvanderwoude.com/wmigen.phpも入手できます。 – Fionnuala

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; 
    }