2012-01-22 61 views
1

如何將未裝配的卷連接到物理磁盤?使用PowerShell WMI或Diskpart檢測選定磁盤上的未裝入卷

假設我需要在磁盤3上找到並掛載未安裝的卷,編號爲DiskpartWMIC或PowerShell WMI。如何通過腳本找出哪些磁盤卷3未裝入?或者,或者,給定的未安裝卷(沒有DriveLetter)的物理磁盤駐留在哪個物理磁盤上?

卸載卷時,不存在邏輯磁盤或掛載點。我想這個關係可以用GetRelated方法找到,但是我找不到適合這個任務的代碼示例。

回答

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 

它使用卷的DeviceID,而不是它的驅動器號,並與捲到磁盤3所示上面看上去在Windows 7中的PowerShell回答。可以像上面那樣使用類似的方法(AddMountPoint或Mount),但不使用Diskpart。

+0

[Stack Overflow不是論壇](http://meta.stackexchange.com/a/92115)。我認爲最好提供自己完整的答案,並在評論中承認其他答案。 –

2

試試這個,它會:

  • 獲得使用WMI
  • 給定的驅動器索引 $targetDisk全部卸載分區
  • 安裝使用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 
    } 
} 
+0

謝謝Andy!清楚和有用。爲什麼你更喜歡使用Diskpart來掛載未掛載的卷?是否有可能使用WMI(如加載) - 如果是的話,你可以給腳本的例子嗎? – sambul35

+0

@ sambul35我搜索了一下如何做到這一點,並沒有找到我在找什麼,所以我用diskpart解決了。這可能只是不會花一整天的時間看。 –

+0

@ sambul35我還使用XP,所以一些WMI類不像Win32_Volume那樣可用。 –