1

如何将卸载的卷链接到物理磁盘?

假设我需要在磁盘 3 上查找并挂载未挂载的卷,编号为DiskpartWMIC或 PowerShell WMI。如何使用脚本找出未安装磁盘 3 的哪些卷?或者,给定的未安装卷(没有 DriveLetter)驻留在哪个物理磁盘上?

卸载卷时,不存在任何逻辑磁盘或安装点。我想可以用GetRelated方法找到关系,但我找不到适合该任务的代码示例。

4

2 回答 2

2

试试这个,它会:

  • $targetDisk使用 WMI获取给定驱动器索引的所有未挂载分区
  • 使用 diskpart 脚本将目标磁盘上发现的分区挂载到下一个可用驱动器号。

使用该GetRelated方法就是要知道你需要关联什么。它有助于了解 WMI 类代表您正在寻找的内容Win32_DiskPartition。在您的情况下,您希望找到与逻辑磁盘(未挂载)不关联的分区,因此我们寻找没有关联的Win32_DiskPartition实例Win32_LogicalDisk

由于您只想在特定物理磁盘上卸载卷,我们需要进一步关联类。为此,我们需要获取Win32_DiskPartition的关联Win32_DiskDrive实例。

$targetDisk = 3

$unmounted = gwmi -class win32_DiskPartition | ? {
    ($_.GetRelated('Win32_LogicalDisk')).Count -eq 0 
}

if ($unmounted) {
    $commands = @()
    $unmounted | ? { $_.GetRelated('Win32_DiskDrive') | ? { $_.Index -eq $targetDisk} } | % {
        $commands += "select disk {0}" -f $_.DiskIndex
        $commands += "select partition {0}" -f ($_.Index + 1)
        $commands += "assign"
    }

    $tempFile = [io.path]::GetTempFileName()
    $commands | out-file $tempFile -Encoding ASCII

    $output = & diskpart.exe /s $tempFile 2>&1
    if ($LASTEXITCODE -ne 0) {
        Write-Error $output
    }
}
于 2012-01-22T03:50:55.490 回答
0

将此代码集成到上述答案中:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_Volume Where Name = 'D:\\'")

For Each objItem in colItems
    objItem.AddMountPoint("W:\\Scripts\\")
Next

它通过使用 Volume DeviceID 而不是 DriveLetter 在 Windows 7 PowerShell 中查找,并将卷与磁盘 3 相关联,如上面的答案所示。可以如上所述使用类似的方法(AddMountPoint 或 Mount),但不使用 Diskpart。

于 2016-07-19T17:11:42.087 回答