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

标签 powershell vbscript disk wmi-query

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

这是我的问题:

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

  2. 我在 VBScript 中使用的查找磁盘编号的方法每次都会根据连接到系统的磁盘(物理硬盘驱动器、VHD、备份磁盘、USB)的顺序给出不同的 vhd 磁盘编号。有时这可能是错误的。请告诉我如何找出系统附加的指定VHD的磁盘号。

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"

最佳答案

您可以在 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
}

关于powershell - 如何通过脚本查看虚拟硬盘的分区数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20344804/

相关文章:

sql-server - 防止单引号破坏sql命令

powershell - 有没有办法使用 Select-String 打印行号和匹配值(不是行)?

powershell - 使用 powershell 在 openxml 中创建一个新行

cpanel - 磁盘空间被 `vda`文件占满,如何清除?

io - 当我在一个 LV 下有多个磁盘时,lvm 的性能如何

powershell - Nuget Powershell : how to add native dependencies? 如何将文件添加到文件夹内的项目?

sql - VBscript 和 ADO - 3704 对象关闭时不允许操作

encoding - 在Vbscript中将UTF-8文件转换为UTF-16 BE文件

jquery - 在 map 上显示多个标记及其自己的信息窗口

c - 写入磁盘上的磁道/磁头/柱面