如何將未裝配的卷連接到物理磁盤?使用PowerShell WMI或Diskpart檢測選定磁盤上的未裝入卷
假設我需要在磁盤3上找到並掛載未安裝的卷,編號爲Diskpart或WMIC或PowerShell WMI。如何通過腳本找出哪些磁盤卷3未裝入?或者,或者,給定的未安裝卷(沒有DriveLetter)的物理磁盤駐留在哪個物理磁盤上?
卸載卷時,不存在邏輯磁盤或掛載點。我想這個關係可以用GetRelated
方法找到,但是我找不到適合這個任務的代碼示例。
如何將未裝配的卷連接到物理磁盤?使用PowerShell WMI或Diskpart檢測選定磁盤上的未裝入卷
假設我需要在磁盤3上找到並掛載未安裝的卷,編號爲Diskpart或WMIC或PowerShell WMI。如何通過腳本找出哪些磁盤卷3未裝入?或者,或者,給定的未安裝卷(沒有DriveLetter)的物理磁盤駐留在哪個物理磁盤上?
卸載卷時,不存在邏輯磁盤或掛載點。我想這個關係可以用GetRelated
方法找到,但是我找不到適合這個任務的代碼示例。
整合這個代碼到上面的回答:
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
它使用卷的DeviceID,而不是它的驅動器號,並與捲到磁盤3所示上面看上去在Windows 7中的PowerShell回答。可以像上面那樣使用類似的方法(AddMountPoint或Mount),但不使用Diskpart。
試試這個,它會:
$targetDisk
全部卸載分區
使用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
}
}
謝謝Andy!清楚和有用。爲什麼你更喜歡使用Diskpart來掛載未掛載的卷?是否有可能使用WMI(如加載) - 如果是的話,你可以給腳本的例子嗎? – sambul35
@ sambul35我搜索了一下如何做到這一點,並沒有找到我在找什麼,所以我用diskpart解決了。這可能只是不會花一整天的時間看。 –
@ sambul35我還使用XP,所以一些WMI類不像Win32_Volume那樣可用。 –
[Stack Overflow不是論壇](http://meta.stackexchange.com/a/92115)。我認爲最好提供自己完整的答案,並在評論中承認其他答案。 –