如何将卸载的卷链接到物理磁盘?
假设我需要在磁盘 3 上查找并挂载未挂载的卷,编号为Diskpart或WMIC或 PowerShell WMI。如何使用脚本找出未安装磁盘 3 的哪些卷?或者,给定的未安装卷(没有 DriveLetter)驻留在哪个物理磁盘上?
卸载卷时,不存在任何逻辑磁盘或安装点。我想可以用GetRelated
方法找到关系,但我找不到适合该任务的代码示例。
试试这个,它会:
$targetDisk
使用 WMI获取给定驱动器索引的所有未挂载分区使用该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
}
}
将此代码集成到上述答案中:
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。