【问题标题】:find disk signature from wmi for a volume?从 wmi 找到卷的磁盘签名?
【发布时间】:2012-10-19 12:19:06
【问题描述】:

gwmi win32_volume 提供了卷的详细信息。

gwmi win32_diskdrive 为我提供了磁盘签名。

如何使用 Powershell 获取特定卷 GUID 的磁盘签名(卷 GUID 类似于 \\?\Volume{2e5e3ff7-fb5a-11e1-9924-80c16e6c465c}\

使用Win32_LogicalDisk 对我来说不是一个选项,因为某些卷可能未安装,并且它们不会有与之关联的字母。很好的例子是 Windows 7 上的 System Reserved 分区。

【问题讨论】:

标签: powershell wmi


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

【讨论】:

    【解决方案2】:

    我认为最好(也是唯一的 IMO)方法是使用 DiskExt.exe from Sysinternals

    您可以使用 PowerShell 解析 DiskExt 输出找到与卷相关的磁盘驱动器,然后使用 win32_volume 选择他的 signature

    【讨论】:

      【解决方案3】:

      您可能正在寻找此代码:

      $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 稍作修改的版本。

      【讨论】:

      • 这将 win32.logicaldisk 与 win32.diskdrive 和 win32.diskpartition 相关联,有 win32.volume
      • 通过音量,我的意思是 win32_volume api,这里的设备 id 是一个音量指南,例如:\\?\Volume{2e5e3ff7-fb5a-11e1-9924-80c16e6c465c}\ 而 win32_diskdrive 使用类似 // ./PHYISICALDRIVE2...单个磁盘驱动器可以关联多个卷
      • @NidaSahar:感谢您的更新。我编辑了你的问题。如果我理解正确,请检查并告诉我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2015-05-26
      • 2013-02-06
      • 2012-08-27
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多