gwmi win32_volume
向我提供了音量的详细信息。
gwmi win32_diskdrive
为我提供了磁盘签名。
如何使用Powershell获取特定卷GUID的磁盘签名(卷GUID看起来像这样\\?\Volume{2e5e3ff7-fb5a-11e1-9924-80c16e6c465c}\
?
使用Win32_LogicalDisk
对我来说不是一个选项,因为某些卷可能未安装,并且它们没有与之关联的字母。好的例子是Windows 7上的System Reserved
分区。
答案 0 :(得分:1)
根据我的要求,我找不到任何gwmi,所以我从powershell访问diskpart。
在这种情况下,我正在获取gwmi win32_diskdrive会帮助我获取的磁盘签名
$volumeCommand = "list volume" | diskpart
$Pattern = 'XXXbbbXXXX'
$Volume
for($i=5; $i -le $volumeCommand.length; $i++)
{
write-host $volumeCommand[$i]
$matched = @(Select-String -inputobject $volumeCommand[$i] -Pattern $Pattern)
if($matched ) {
$Volume=$volumeCommand[$i -1 ]
break
}
}
$columnToGet = 1
$volumeName = $Volume |
%{ $_.Split(" ",[StringSplitOptions]"RemoveEmptyEntries")[$columnToGet] }
$selectCommand = "sel volume " +$volumeName
$uniqueid = "uniqueid disk"
write-host $selectCommand
$volumeuniqueidCommand = $selectCommand , $uniqueid | diskpart
write-host $volumeuniqueidCommand
$signature = $volumeuniqueidCommand[$volumeuniqueidCommand.length-3].trimStart("Disk ID: ")
write-host $signature
$signature = [CONVERT]::toint32($signature,16)
write-host $signature
答案 1 :(得分:0)
我认为最好的(也是唯一的IMO)方式是使用DiskExt.exe
from Sysinternals
您可以使用PowerShell解析DiskExt
输出,找到与该卷相关的磁盘驱动器,然后使用win32_volume
选择其signature
值
答案 2 :(得分:0)
您可能正在寻找此代码:
$StrComputer = 'COMPUTER_NAME'
$DeviceId = "X:"
$wmiLogicalDiskQuery = "ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + $DeviceId + "'} where AssocClass = Win32_LogicalDiskToPartition";
$PhysicaldiskPartitionName = (gwmi -Query $wmiLogicalDiskQuery).Name;
$wmiPhysicalDiskQuery = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + $PhysicaldiskPartitionName + "'} where AssocClass = Win32_DiskDriveToDiskPartition";
$PhysicaldiskDriveName = (gwmi -Query $wmiPhysicalDiskQuery -Comp $StrComputer).DeviceID
$DiskSignature = (gwmi Win32_DiskDrive -Comp $StrComputer | where-object {$_.DeviceID -eq $PhysicaldiskDriveName} ).Signature
这是here的略微修改版本。