將 Windows 11 使用者目錄設在非系統碟

/
簡體中文正體中文
摘要:
在全新安裝的 Windows 11 上,使用稽核模式和回應檔,讓使用者目錄從一開始就建立在非系統碟上。

Windows 的使用者目錄預設在 C:\Users,桌面、文件、下載、圖片,以及各種軟體塞進 AppData 裡的快取與設定,都放在這裡。時間一長,系統碟很快就會被塞滿。

有些變通做法能緩解這個問題。例如,在文件、下載等資料夾的內容中變更位置,但這只能移走幾個資料夾,AppData 還留在原地。裝完系統之後修改登錄檔,或者用 mklink /J 建立目錄聯結。不過,既有的使用者設定檔到處都是舊路徑,權限也可能對不上,日後安裝軟體或更新時就容易出問題。

比較乾淨的做法,是在系統剛裝好、尚未建立使用者帳戶時,先告訴 Windows 要把使用者目錄放在哪裡。這樣第一個使用者的目錄就會直接建在新位置。微軟提供的設定方式,就是回應檔中的 ProfilesDirectory。以下是在全新安裝的 Windows 11 上使用它的步驟。

原理

ProfilesDirectory 屬於 Microsoft-Windows-Shell-Setup 元件下的 FolderLocations,在 oobeSystem 這個設定階段生效。OOBE 就是安裝完成後讓你選區域、連線、建立帳戶的那一套首次開機流程,使用者目錄是在這個階段之後才建立出來的。

所以,只要在進入 OOBE 前,把含有這項設定的回應檔交給 Windows 即可。這時就要用到稽核模式:它位於安裝完成與 OOBE 之間,可以使用內建系統管理員登入,執行 Sysprep 並指定回應檔,完成後再回到 OOBE。

Mermaid diagram

操作

進入稽核模式

正常安裝 Windows,直到出現區域選擇畫面。此時先不要繼續,按下 Ctrl + Shift + F3。系統會重新開機,並以內建系統管理員身分直接登入桌面,同時開啟 Sysprep 視窗。先關閉這個視窗,稍後再透過命令列執行。

進入稽核模式前,最好先拔掉網路線,或不要連上 Wi-Fi。Windows 連網後可能自動更新 Microsoft Store 應用程式,這類與特定使用者綁定的更新經常導致 Sysprep 失敗;保持離線可以避開這個問題。

準備資料碟

目標磁碟必須使用 NTFS 格式,而且不能裝有另一份 Windows。如果是全新的磁碟,先到「磁碟管理」完成初始化、分割與格式化。

Important

稽核模式中的磁碟機代號,可能與安裝程式中看到的不同。撰寫回應檔之前,請先在檔案總管確認目標磁碟目前的代號。

撰寫回應檔

用記事本新增一個檔案,儲存到目標磁碟的根目錄,這裡叫 relocate.xml,存檔類型選「所有檔案」,編碼選 UTF-8。

XML
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
  <settings pass="oobeSystem">
    <component name="Microsoft-Windows-Shell-Setup"
               processorArchitecture="amd64"
               publicKeyToken="31bf3856ad364e35"
               language="neutral"
               versionScope="nonSxS"
               xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <FolderLocations>
        <ProfilesDirectory>D:\Users</ProfilesDirectory>
      </FolderLocations>
    </component>
  </settings>
</unattend>

processorArchitecture 要和系統一致,一般 64 位元電腦是 amd64,ARM 裝置是 arm64。ProfilesDirectory 指定要使用的位置,D:\Users 只是個例子,路徑不能是空的。

執行 Sysprep

以系統管理員身分開啟命令提示字元。先停止 Windows Media Player 網路共用服務,以免它影響 Sysprep,再指定回應檔執行 Sysprep。

CMD
net stop wmpnetworksvc
%windir%\system32\sysprep\sysprep.exe /oobe /reboot /unattend:d:\relocate.xml

/oobe 表示完成後回到 OOBE,/reboot 是完成後重新開機,/unattend 指向剛才的回應檔。過一會兒電腦會重新開機,再次出現選擇區域的畫面,這次正常走完流程,建立使用者就好。

確認結果

進入系統之後,開啟命令提示字元。

CMD
echo %USERPROFILE%

如果輸出類似 D:\Users\用户名,且最後一段是你的使用者名稱,就表示成功了。也可以查看系統用來記錄此位置的登錄機碼。

CMD
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory

Sysprep 失敗的時候

Sysprep 失敗時,視窗中的訊息通常無法看出原因,需要查看記錄檔。檔案位於 %windir%\System32\Sysprep\Panther 下面,setupact.log 是完整的過程,setuperr.log 只記錄錯誤。搜尋 error 和 fail,就能找到出問題的步驟。

常見原因就是前面提到的兩種:連網後 Store 應用程式被更新,或網路共用服務尚未停止。若是應用程式的問題,記錄檔會出現類似「套件已為某個使用者安裝,但未為所有使用者佈建」的訊息,並指出應用程式名稱。透過 PowerShell 解除安裝後,再執行 Sysprep。下方指令中的應用程式名稱佔位文字,需替換成實際名稱。

POWERSHELL
Get-AppxPackage *应用名* | Remove-AppxPackage

另外,Sysprep 同一時間只能執行一個執行個體。重複啟動,或上次執行異常結束,都可能讓它立即失敗;重新開機後再試即可。

使用限制

這個方法只適用於使用者目錄建立之前。已經安裝並使用一段時間的系統,需要重新安裝後才能操作。不過,日後重裝 Windows 時,即使格式化系統碟,資料碟上的使用者檔案仍會保留,可以直接取回需要的檔案。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...