Windowsボリュームのドライブ文字に関連付けられたPowerShell Get-Diskコマンドレットから返されたシリアル番号のようなシリアル番号を取得したいと考えています。私はこれを行う方法の正しい方向に私を指し示すものを見つけるためにstruglingしています。私は人々がvbscriptとc#から呼び出されたWMIクエリを介してこれを現場で行うことができたことがわかります。ドライブ文字からディスクシリアル番号を取得
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;
}
これを行うには、エレガントな方法がありますか?
Windows 7では、FYIとして 'Get-Disk'を利用できません。 – TheIncorrigible1