如何於 Windows 8 自動化掛載 VHD(x) ?

本文將介紹利用 Diskpart 公用程式搭配工作排程器,讓您不需要每次開機都手動掛載 VHD,可以用自動化的方式來掛載虛擬硬碟檔。

情境說明

因筆者的 PC 更換 SSD,索性將整個 OS 重灌為 Windows 8 Enterprise,於重灌前利用 Disk2vhd 將整顆硬碟轉成 VHD,以防漏掉重要資料沒有備份,當 Windows 8 重灌完畢之後要讀取 VHD 檔雖然可以利用 Windows 8 內建的掛接功能(如下圖)來將 VHD 掛載為模擬的磁碟機,但每次重新開機都必須重新掛接,使用起來稍微不太方便。

image

若您的 Windows 8 安裝在支援 Hyper-V 的機器上,或許也可以試試看利用 PowerShell 的 Mount-VHD 來掛載 VHD,但因為筆者的電腦並未支援 SLAT 功能,因此使用 Mount-VHD 會發生虛擬機器管理服務未執行的錯誤(如下列兩張圖)。

image

image

因此,本文將介紹利用 Diskpart 公用程式搭配工作排程器,讓您不需要每次開機都手動掛載 VHD,可以用自動化的方式來掛載虛擬硬碟檔。

建立 Diskpart 命令檔

首先開啟記事本輸入下列指令,主要是利用 select vdisk  指令來取得 VHD 檔,並利用 attach vdisk 來掛載,輸入完畢之後筆者將之儲存為 AttachVHD.txt。

select vdisk file="D:\VHDs\W8-OFFICE.vhd"
attach vdisk

接著再開啟記事本輸入下列指令,用來透過 diskpart /s 的選項來執行 AttachVHD.txt 裡的指令,輸入完畢之後筆者將檔案儲存為 AttachVHD.cmd(特別注意必須儲存命令檔)。


diskpart /s D:\VHDs\AttachVHD.txt 

若此時您直接執行 AttachVHD.cmd,依照預設 Windows 8 的 UAC 會詢問是否是否允許該程式變更這部電腦,造成自動掛載 VHD 的動作會被中斷。

建立工作排程執行 Diskpart 命令檔】

您可以透過工作排程器建立一個執行 AttachVHD.cmd 的排程,請於工作排程器視窗中點選右側的【動作 > 建立工作】。

image

在【一般】頁籤中輸入工作名稱,並選擇【以最高權限執行】,這是避免 UAC 阻止您利用 Diskpart 自動掛載最重要的步驟。

image

點選【動作】頁籤,按下【新增】按鈕來選擇您所建立的 cmd 檔,最後按確定來完成建立工作。

image

利用捷徑執行工作

最後您必須建立捷徑來利用 schtasks.exe 來直接執行這個名稱為 AttachVHD 的工作(如下圖)。


schtasks.exe /run /tn AttachVHD

image

輸入捷徑名稱後按完成。

image

將捷徑加入啟動項目

從檔案總管開啟【C:\Users\使用者名稱\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup】路徑,或是利用【Ctrl + R】開啟執行視窗後輸入【shell:startup】來直接開起啟動項目的路徑,然後將上一步驟建立的捷徑複製到啟動項目路徑,重新開機試試看是否 VHD 已經自動掛載。

參考資料

- Diskpart 指令行公用程式的說明

- Disk2vhd v1.63

- 微軟免費的P2V工具-Disk2vhd | 蘇老碎碎唸

- Windows 7: Bypass UAC Prompt For Specific Application

- Windows 7: Automatically Attach VHD Images

- VHD mounting under Windows 7,Todd's World

- Steps to add or remove Startup Programs in Windows 8