我试图通过脚本查找 Hyper-V 2012 VHD 上的分区数量。目前我正在使用 VBScript 和 PowerShell 脚本执行此操作。为此,我首先使用 WMI 查询在 VBScript 中查找(VHD 的)磁盘号,并将该磁盘号作为参数传递给 PowerShell 脚本,该脚本给出分区数。
这是我的问题:
有没有直接通过脚本查找附加VHD的分区数的方法?如果有,请分享。
我在 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/