Rus*_*ber 5 windows partition wmi disk-volume
问题:我需要弄清楚哪个卷对应哪个分区,哪个分区对应于一个非常有效的脚本庄园中的哪个磁盘。我知道如何对应哪个分区对应哪个磁盘,因为磁盘id直接在一个简单的wmic查询的结果中。然而,问题的第一部分更加困难。如何关联哪个卷属于哪个分区?
有没有办法使用 wmic、PowerShell、cmd 提示符对哪个卷映射到哪个分区进行逆向工程,这适用于所有当前支持的 Windows Server 版本(Windows Server 2008R2 - Windows Server 2016)?
如果是这样,这个查询看起来如何?
使用 diskpart 获取信息不是一种选择。虽然它可以用来编写磁盘操作的脚本,但是使用 diskpart 作为返回有关磁盘配置信息的工具是很糟糕的。Diskpart 输出不可解析。
一种可能的解决方案是以下 power shell 脚本。输出应为 JSON 格式。此解决方案的问题在于它依赖于 get-partition cmdlet。该cmdlet是在Windows 2008R2之后引入的。如果要将 get-partition cmdlet 移植到 Windows 2008R2,或者如果我找到了可以在 Windows 2008R2 上执行相同操作的解决方案,则这将作为一种解决方案。虽然不是完整的解决方案,但它不适合作为评论。
$CimPartInfo = get-partition
"{"
foreach ($CimPart in $CimPartInfo) {
if ($CimPart.Guid -eq $null) {
$PartGUID = [regex]::match($CimPart.AccessPaths, 'Volume({[^}]+})').Groups[1].Value
}
else {
$PartGUID = $CimPart.Guid
}
"`"$PartGUID`": {"
"`"DiskId`": $($CimPart.DiskNumber),"
"`"PartitionId`": $($CimPart.PartitionNumber),"
"`"Type`": `"$($CimPart.Type)`","
"`"Size`": $($CimPart.Size),"
"`"Offset`": $($CimPart.Offset),"
"`"GUID`": `"$($CimPart.Guid)`","
$x = $CimPart.IsBoot
"`"Bootable`": $($x.ToString().ToLower()),"
"`"Status`": `"$($CimPart.OperationalStatus)`""
if ($CimPart -eq $CimPartInfo[-1]){ "}"}
else {"},"}
} #foreach CimPart
"}"
Run Code Online (Sandbox Code Playgroud)