將擴充性指令碼新增至一鍵重設

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重設功能

有四個 擴充點 可用來指向接近 [保留我的檔案 ] 開頭和結尾處執行的腳本,或 [移除所有 作業]。 針對常見的自訂,您通常只需要單一腳本,如下列 範例腳本 所示。

擴充點

在下列步驟中可以摘要說明 [保留我的檔案 ] 功能:

  1. 電腦會開機進入 Windows 復原環境 (Windows RE) 。
  2. 擴充點 A (BasicReset_BeforeImageApply) :在此新增腳本,以複製使用者執行 [保留我的檔案 ] 功能時,預設不會移轉的檔案、驅動程式或設定。
  3. 使用者帳戶、設定和資料會收集並移至暫存位置。
  4. 使用 Windows 元件存放區中的檔案,在暫存位置建構 OS 的新複本。
  5. 儲存在 C:\Recovery\Customizations 下布建套件中的自訂專案會套用至新的 OS。
  6. 驅動程式會從現有的 OS 複製,並插入新的 OS。
  7. 預先安裝的 Windows 應用程式會從其備份位置還原。
  8. 系統會將系統關鍵設定套用至新的 OS。
  9. 現有的 OS 會移至 C:\Windows.old。
  10. 新的 OS 會移至 OS 磁片區的根目錄。
  11. 擴充點 B (BasicReset_AfterImageApply) :在這裡新增腳本以還原自訂檔案 (unattend.xml、layoutmodification.xml) 或還原您可能已在擴充點 A 備份的檔案和設定。
  12. 電腦重新開機至新的 OS。
  13. 在第一次開機期間,會重新套用使用者資料和設定。

移除所有專案功能可以在下列步驟中摘要說明:

  1. 電腦會開機進入 Windows 復原環境 (Windows RE) 。
  2. 使用者帳戶、資料和已安裝的 Windows 應用程式和 Windows 傳統型應用程式會從 OS 磁片區中移除。
  3. 如果使用者) 要求,資料磁片區會格式化 (。
  4. 如果使用者要求,則會在 OS 和資料磁片區上執行資料清除) (。
  5. 擴充點 C (FactoryReset_AfterDiskFormat) :視需要在這裡新增腳本以重新設定資料分割。 重要事項:請勿修改 Windows 磁碟分割。
  6. 使用 Windows 元件存放區中的檔案,在暫存位置建構 OS 的新複本。
  7. 儲存在 C:\Recovery\Customizations 下布建套件中的自訂專案會套用至新的 OS。
  8. 驅動程式會從現有的 OS 複製,並插入新的 OS。
  9. 預先安裝的通用 Windows 應用程式會從其備份位置還原。
  10. 已移除現有的 OS。
  11. 新的 OS 會移至 OS 磁片區的根目錄。
  12. 擴充點 D (FactoryReset_AfterImageApply) :在這裡新增腳本以還原自訂檔案 (unattend.xml,layoutmodification.xml) 。
  13. 電腦重新開機至新的 OS。
  14. 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重設功能 主題中的指示。

按鈕重設概觀

建立媒體以執行Push-Button重設功能

部署Push-Button重設功能

REAgentC 命令列選項

ResetConfig XML 參考