將擴充性指令碼新增至一鍵重設
OEM 可以插入自訂腳本,當使用者執行按鈕重設功能時執行: 保留我的檔案 並 移除所有專案。
您可以使用擴充性腳本或 自動套用資料夾 來還原未還原的常見自訂專案,包括:
- [開始] 功能表
- 工作列
- OOBE
- Unattend.xml自訂
此外,擴充性腳本可協助執行其他工作,例如:
- 修改資料或公用程式分割區
- 儲存和還原 通常不受 保留我的檔案 功能所保留的檔案。
注意
如果您包含自動套用資料夾,則不應該包含擴充性腳本。 如果您同時包含自動套用資料夾和擴充性腳本,將會忽略自動套用資料夾。
關於新增擴充性腳本
若要新增擴充性腳本,您必須瞭解下列概念:
- 擴充點 - 按鈕重設程式期間的不同點,您可以在其中執行自訂腳本。
- 擴充性腳本 - 在已定義擴充點執行的腳本。
- 按鈕重設組態檔 (ResetConfig.xml) - 檔案會定義在不同擴充點執行的腳本。
在復原期間啟用腳本
若要將擴充腳本新增至按鈕重設,請在 資料夾中新增下列所有專案 C:\Recovery\OEM
:
- 按鈕重設組態檔 (ResetConfig.xml) ,可定義要執行的腳本。
- 擴充性腳本
- 擴充性腳本所需的任何檔案。
擴充性腳本
需求:
- 腳本會格式化為 .cmd 或 .exe 檔案。
- 腳本不相依于預設Windows RE映射中不存在的 Windows PE 選用元件, (winre.wim) 。
- 腳本不相依于二進位檔 (,例如.exe或.dll檔案) 預設Windows RE映射中不存在, (winre.wim) 。
- 腳本會執行而不顯示圖形化使用者介面, (GUI) 。
- 腳本會在 5 分鐘內完成每個擴充點的所有預定函式。
- 腳本不得修改磁碟機號。 這可能會造成復原失敗。
- 如果成功,腳本必須傳回
0
(零) 。 如果按鈕重設收到非 0 值,則會發生下列步驟:- 如果執行 [保留我的檔案 ] 功能:所有系統變更都會回復。 如果腳本或可執行檔是從 Windows 電腦設定 功能表起始,系統會在 Windows 中重新開機。 如果腳本或可執行檔是從 Windows RE 或進階啟動功能表起始,則系統會保留在Windows RE,並顯示錯誤訊息。
- 如果執行 [移除所有專案] 功能:則會忽略失敗。 腳本或可執行檔會繼續進行重設程式中的下一個步驟,並記錄失敗。
按鈕重設組態檔 (ResetConfig.xml)
新增 ResetConfig.xml 檔案,以指向您的按鈕重設擴充性腳本。
此檔案必須儲存為 UTF-8的檔案類型。 請勿使用 ANSI 編碼。 例如:在 [記事本] 中,按一下 [ 檔案],然後按一下 [ 另存新檔]。 在 [ 編碼] 方塊中,選取 [UTF-8]。
儲存此檔案,並將其複製到 Windows 映像中作為 C:\Recovery\OEM\ResetConfig.xml
。
您可以使用相同的ResetConfig.xml檔案來設定 Windows 來建立復原媒體。 如需詳細資訊,請參閱 部署Push-Button重設功能。
有四個 擴充點 可用來指向接近 [保留我的檔案 ] 開頭和結尾處執行的腳本,或 [移除所有 作業]。 針對常見的自訂,您通常只需要單一腳本,如下列 範例腳本 所示。
擴充點
在下列步驟中可以摘要說明 [保留我的檔案 ] 功能:
- 電腦會開機進入 Windows 復原環境 (Windows RE) 。
- 擴充點 A (BasicReset_BeforeImageApply) :在此新增腳本,以複製使用者執行 [保留我的檔案 ] 功能時,預設不會移轉的檔案、驅動程式或設定。
- 使用者帳戶、設定和資料會收集並移至暫存位置。
- 使用 Windows 元件存放區中的檔案,在暫存位置建構 OS 的新複本。
- 儲存在 C:\Recovery\Customizations 下布建套件中的自訂專案會套用至新的 OS。
- 驅動程式會從現有的 OS 複製,並插入新的 OS。
- 預先安裝的 Windows 應用程式會從其備份位置還原。
- 系統會將系統關鍵設定套用至新的 OS。
- 現有的 OS 會移至 C:\Windows.old。
- 新的 OS 會移至 OS 磁片區的根目錄。
- 擴充點 B (BasicReset_AfterImageApply) :在這裡新增腳本以還原自訂檔案 (unattend.xml、layoutmodification.xml) 或還原您可能已在擴充點 A 備份的檔案和設定。
- 電腦重新開機至新的 OS。
- 在第一次開機期間,會重新套用使用者資料和設定。
移除所有專案功能可以在下列步驟中摘要說明:
- 電腦會開機進入 Windows 復原環境 (Windows RE) 。
- 使用者帳戶、資料和已安裝的 Windows 應用程式和 Windows 傳統型應用程式會從 OS 磁片區中移除。
- 如果使用者) 要求,資料磁片區會格式化 (。
- 如果使用者要求,則會在 OS 和資料磁片區上執行資料清除) (。
- 擴充點 C (FactoryReset_AfterDiskFormat) :視需要在這裡新增腳本以重新設定資料分割。 重要事項:請勿修改 Windows 磁碟分割。
- 使用 Windows 元件存放區中的檔案,在暫存位置建構 OS 的新複本。
- 儲存在 C:\Recovery\Customizations 下布建套件中的自訂專案會套用至新的 OS。
- 驅動程式會從現有的 OS 複製,並插入新的 OS。
- 預先安裝的通用 Windows 應用程式會從其備份位置還原。
- 已移除現有的 OS。
- 新的 OS 會移至 OS 磁片區的根目錄。
- 擴充點 D (FactoryReset_AfterImageApply) :在這裡新增腳本以還原自訂檔案 (unattend.xml,layoutmodification.xml) 。
- 電腦重新開機至新的 OS。
- OOBE 啟動。
範例:還原 [開始] 功能表、工作列、OOBE 和unattend.xml自訂專案
以下是範例腳本和範例ResetConfig.xml檔案,可一起在Windows 11上還原按鈕重設期間的一般自訂。 您可以使用這些範例來測試按鈕復原。 若要使用下列範例進行測試:
- 將下列專案儲存到
C:\Recovery\OEM
資料夾中:- 範例腳本 CommonCustomizations.cmd
- 按鈕重設組態檔, ResetConfig.xml
- [開始] 功能表組態檔的複本, (LayoutModification.json)
- 工作列組態檔的複本 (TaskbarLayoutModification.xml)
- unattend.xml檔案的複本
以下是範例腳本和範例ResetConfig.xml檔案,可一起在Windows 10上還原一般自訂專案。 您可以使用這些範例來測試按鈕復原。 若要使用下列範例進行測試:
- 將下列專案儲存到
C:\Recovery\OEM
資料夾中:- 範例腳本 CommonCustomizations.cmd
- 按鈕重設組態檔, ResetConfig.xml
- [開始] 功能表組態檔的複本 (LayoutModification.xml)
- 工作列組態檔的複本 (TaskbarLayoutModification.xml)
- unattend.xml檔案的複本
- 將整個 OOBE 資料夾及其子資料夾
%WINDIR%\System32\Oobe\Info\
C:\Recovery\OEM\OOBE\Info
複製到 。
CommonCustomizations.cmd
此檔案會將自訂檔案從 Recovery 資料夾複製到復原的 OS。
rem CommonCustomizations.cmd
rem Define %TARGETOS% as the Windows folder (This later becomes C:\Windows)
for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment" /v TargetOS') DO SET TARGETOS=%%C
rem Define %TARGETOSDRIVE% as the Windows partition (This later becomes C:)
for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
rem Add back Windows settings, Start menu, Taskbar, and OOBE.xml customizations
copy "%TARGETOSDRIVE%\Recovery\OEM\Unattend.xml" "%TARGETOS%\Panther\Unattend.xml" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\LayoutModification.json" "%TARGETOSDRIVE%\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.json" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\TaskbarLayoutModification.xml" "%TARGETOS%\OEM\TaskbarLayoutModification.xml" /y
xcopy "%TARGETOSDRIVE%\Recovery\OEM\OOBE\Info" "%TARGETOS%\System32\Oobe\Info\" /s
rem Recommended: Create a pagefile for devices with 1GB or less of RAM.
wpeutil CreatePageFile /path=%TARGETOSDRIVE%\PageFile.sys /size=256
EXIT 0
rem CommonCustomizations.cmd
rem Define %TARGETOS% as the Windows folder (This later becomes C:\Windows)
for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment" /v TargetOS') DO SET TARGETOS=%%C
rem Define %TARGETOSDRIVE% as the Windows partition (This later becomes C:)
for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
rem Add back Windows settings, Start menu, Taskbar, and OOBE.xml customizations
copy "%TARGETOSDRIVE%\Recovery\OEM\Unattend.xml" "%TARGETOS%\Panther\Unattend.xml" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\LayoutModification.xml" "%TARGETOSDRIVE%\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\TaskbarLayoutModification.xml" "%TARGETOS%\OEM\TaskbarLayoutModification.xml" /y
xcopy "%TARGETOSDRIVE%\Recovery\OEM\OOBE\Info" "%TARGETOS%\System32\Oobe\Info\" /s
rem Recommended: Create a pagefile for devices with 1GB or less of RAM.
wpeutil CreatePageFile /path=%TARGETOSDRIVE%\PageFile.sys /size=256
EXIT 0
ResetConfig.xml
注意
此範例會指向相同的腳本兩次,因此這兩者皆可供 保留我的檔案 或 移除所有 功能使用。
<?xml version="1.0" encoding="utf-8"?>
<!-- ResetConfig.xml -->
<Reset>
<Run Phase="BasicReset_AfterImageApply">
<Path>CommonCustomizations.cmd</Path>
<Duration>2</Duration>
</Run>
<Run Phase="FactoryReset_AfterImageApply">
<Path>CommonCustomizations.cmd</Path>
<Duration>2</Duration>
</Run>
<!-- May be combined with Recovery Media Creator
configurations – insert SystemDisk element here -->
</Reset>
保留和擷取檔案
使用 [保留我的檔案 ] 功能,您可以使用範例腳本來保留要移除的檔案,方法是將它們放在記憶體中的暫存位置。 您無法使用 [移除所有專案] 功能來保留檔案。
如有需要,您可以使用下列位置來儲存空間。
Windows PE RAM 磁碟磁碟機 (X:) 。 此虛擬磁片磁碟機是由 Windows PE 所建立,並在 保留我的檔案 程式期間保持作用中。 您可以將它與 保留我的檔案 功能搭配使用,以在重新整理資料分割之前儲存資料,以及在資料分割重新整理完成後還原資料。 可用記憶體數量受限於系統上的 RAM 數量,減去完全擴充時Windows RE工具所需的 RAM 數量。 如需掛接Windows RE和判斷完整擴充檔案大小的指示,請參閱自訂Windows RE。
指定的 OEM 磁碟分割。 您可以在分割區上保留額外的空間。 例如,您可以在復原映射分割區上保留空間,並使用腳本暫時指派磁碟機號,然後將檔案儲存到該分割區。 不過,如果您的使用者使用復原媒體來重新分割磁片,這些分割區上的資料可能會在復原過程中遺失。
這些範例腳本會保留 Windows 記錄檔。 將這些腳本儲存在 C:\Recovery\OEM
資料夾中。
保留檔案的範例ResetConfig.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- ResetConfig.xml -->
<Reset>
<Run Phase="BasicReset_BeforeImageApply">
<Path>SaveLogFiles.cmd</Path>
<Duration>4</Duration>
</Run>
<Run Phase="BasicReset_AfterImageApply">
<Path>RetrieveLogFiles.cmd</Path>
<Duration>2</Duration>
</Run>
<!-- May be combined with Recovery Media Creator
configurations – insert SystemDisk element here -->
</Reset>
保留檔案的範例擴充性腳本
SaveLogFiles.cmd:將記錄檔儲存到記憶體中的暫存資料夾
:rem == SaveLogFiles.cmd
:rem == 1. Use the registry to identify the location of
:rem the new operating system and the primary hard
:rem drive. For example,
:rem %TARGETOS% may be defined as C:\Windows
:rem %TARGETOSDRIVE% may be defined as C:
for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment" /v TargetOS') DO SET TARGETOS=%%C
for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
:rem == 2. Copy old Windows logs to a temporary folder in memory
mkdir X:\Temp
xcopy %TARGETOS%\Logs\*.* X:\temp\OldLogs /cherkyi
EXIT 0
擷取檔案的範例擴充性腳本
RetrieveLogFiles.cmd:擷取 SaveLogFiles.cmd 腳本儲存在記憶體中的檔案。
:rem == RetrieveLogFiles.cmd
:rem == This sample script retrieves the files that
:rem were saved in memory by
:rem SaveLogFiles.cmd,
:rem and adds them back to the system.
:rem == 1. Use the registry to identify the location of
:rem the new operating system and the primary drive.
:rem
:rem %TARGETOS% is the Windows folder
:rem (This later becomes C:\Windows)
:rem %TARGETOSDRIVE% is the Windows partition
:rem (This later becomes C:)
for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment" /v TargetOS') DO SET TARGETOS=%%C
for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
:rem == 2. Copy the old logs to the new OS
:rem at C:\Windows\OldLogs
mkdir %TARGETOS%\OldLogs
xcopy X:\Temp\OldLogs\* %TARGETOS%\OldLogs /cherkyi
EXIT 0
替代方法:部署後複製腳本
在使用者完成 OOBE 之後,復原腳本會從 C:\Recovery\OEM
資料夾移至復原分割區,網址為 R:\RecoveryImage\
。
在發生此作業之前,不太可能使用按鈕重設,這些腳本可能無法執行。 若要避免這種可能性,您可以在部署映射之後, R:\RecoveryImage\
將復原檔案直接複製到復原磁碟分割。
下一步
既然您已自訂按鈕重設體驗,您可以部署復原映射以進行按鈕重設, (Install.wim) 復原映射分割區。
若要複製 Diskpart 腳本、ResetConfig.xml檔案,以及將按鈕重設復原映射 (install.wim) 至目的地電腦的復原映射磁碟分割,請遵循 部署Push-Button重設功能 主題中的指示。