如何通过脚本查找虚拟硬盘的分区数?

时间:2013-12-03 06:59:24

标签: powershell vbscript disk wmi-query

我试图通过脚本找到Hyper-V 2012的VHD上的分区数。目前我正在使用VBScript和PowerShell脚本执行此操作。为此,我首先使用WMI查询来查找VBScript中的磁盘编号(VHD),并将此磁盘编号作为参数传递给PowerShell脚本,该脚本提供了分区数。

以下是我的问题:

  1. 有没有直接的方法通过脚本查找附加的VHD分区数?如果是,请分享。

  2. 我在VBScript中使用的方法找到磁盘号,每次都给我不同的磁盘号vhd,具体取决于连接的磁盘(物理硬盘,VHD,备份磁盘,USB)到系统。这可能是错误的一段时间。请告诉我如何查找连接到系统的指定VHD的磁盘编号。

  3. VBScript中的代码以找出磁盘编号:

    strComputer = "."
    
    Dim i
    
    i = 0
    
    Set objWMIService = GetObject("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" _
      & strComputer & "\root\cimv2")
    
    Set colQuotas = objWMIService.ExecQuery _
      ("Select * from Win32_DiskQuota")
    
    For each objQuota in colQuotas
      i= i+1
    Next
    
    i = i - 1 
    
    Wscript.Echo i 
    

    PowerShell脚本代码:

    $DN = $args[0]
    
    Write-Host "disk number  $DN"
    
    $ObjPartition = Get-Partition -DiskNumber DN | measure
    
    $NoOfPartition = $ObjPartition.count
    
    Write-Host "No of Partition $NoOfPartition"
    

1 个答案:

答案 0 :(得分:2)

您可以在PowerShell中自动diskpart以确定磁盘ID和路径,然后使用WMI查询中的ID来确定分区号。例如:

('list vdisk' | diskpart) -match '\.vhd' | % {
  $a = $_.Trim() -split '  +', 5
  New-Object -Type PSObject -Property @{
    'ID'   = $a[1] -replace 'Disk '
    'Path' = $a[4]
  }
} | % {
  $flt = "DeviceID='\\\\.\\PHYSICALDRIVE$($_.ID)'"
  $partitions = gwmi Win32_DiskDrive -Filter $flt | select -Expand Partitions

  "{0}`t{1}`t{2}" -f $_.ID, $partitions, $_.Path
}