201208050054實戰Win7無人值守光碟製作

目標:製作一張x86+x64的Win7 SP1光碟,整合IE9及Hotfix,安裝Java,導入自訂使用環境。

需要的材料有:

前置作業的部份,請參考前面的文章,這邊從巳整合好的install.wim開始後期的加工處理。 

在建置回應檔時,我們在回應檔裏設定了一個 FirstLogonCommands,告訴系統在第一次登入系統時,執行「C:\Windows\Setup\Setting.cmd」這個指令,這個指令是用來做後續收尾的動作,例如安裝軟體、導入登錄檔等等。 

前面我們在整合Hotfix時,整個程序會先暫停一次,好讓我們刪除不必要的檔案,這時你就可以把Setting.cmd放入「C:\Windows\Setup」的目錄裏。若是忘了也沒關係,我們可以用Gimagex把install.wim重新解開,再對其中的檔案新增、刪減,最後再壓回至映像檔,其實是一樣的。

Mount Point就是存放映像檔解壓後的目錄,目錄自己新增,這個目錄最好跟你的Source分處不同的硬碟,這樣處理起來速度才會快。

 

檔案要壓回至映像檔時,記得先點選映像檔,再點選「Unmount」。


 

若是你碰到以下的錯誤畫面:



解決方法:將原有的Mount Point目錄刪除,再新建一個,然後刪除以下機碼即可。

 

通常我們習慣將系統與資料分開,系統與程式安裝在C槽,個人資料存放在D槽,這樣日後若需要重灌或是Recover時,就不用額外費心去處理資料的備份。Win7所有帳號的資料預設是存放在「C:\使用者」(Users)裏,這個目錄相當於WinXP的「Documents and Settings」。

更改這個Users目錄存放路徑有幾種方法:

1. 將「C:\Users」複製到D槽去,然後設定符號連結(Symbolic Link)至新的位置。這個方法限於巳安裝完成的系統,且很手續很複雜,實際使用上問題也很多。

2. 在安裝Windows7的過程中,要求輸入用戶名及密碼的時候,先不輸入任何信息,按「Shift+F10」叫出DOS視窗,輸入以下命令:

 robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ 

 rmdir "C:\Users" /S /Q

 mklink /J "C:\Users" "D:\Users"

然後關閉DOS視窗,繼續安裝直到完成,安裝完成後,預設位置就是在「D:\Users」。這個方法比上面簡單,不過這樣就無法做到無人值守安裝了。

3. 在回應檔「Microsoft-Windows-Shell-Setup\FolderLocations」這個元件裏,設定 "ProfilesDirectory = D:\Users",直接設定預設位置到D槽去。這個方法最簡單,也無副作用。

那我們這邊採用那種方法呢?

三種都不用。

啥?… 

我原本也是採用第三種方法,但經過思考及評估後,我個人覺得這樣做也不是很妥當。原因在於,個人帳號的目錄裏不是只有單純的一般用戶資料,它還包含了一些程式的元件或設定。若我今天要重灌系統,我會希望安裝完後整個系統是乾淨的,而不是個人帳號目錄裏還遺留前代的程式在裏面,包含一些你巳移除的程式殘渣。而且,這種方法在重灌時,系統發現Users目裏若有與帳號相同的舊目錄,會將新的帳號目錄重新命為「帳號+電腦名稱+數字編號」。重灌個幾次,目錄一多起來也是很傷腦筋的事…

因此還是秉持著把程式與資料分開的原則,這邊採用微軟官方認可的方法,把個人帳號目錄裏存放資料的幾個資料夾,如「我的文件」、「我的最愛」、「我的音樂」等等,透過修改系統登錄檔,直接修改預設位置到「D:\Users」。

 

回到主題,來看Setting.cmd的內容:

@ECHO OFF
Title Setting
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%i:\sources\install.wim (
	SET Setting=%%i:\sources\addon
        SET CDROM=%%i
)

SET BakDate=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

Powercfg -h off


IF %CDROM% == D (
    GOTO Type
) ELSE (
    
    MKDIR D:\Users\Backup > nul
    MOVE /Y D:\Users\%USERNAME%\Desktop D:\Users\Backup\Desktop_%BakDate% > nul
    ATTRIB -H -S D:\Users\Backup\Desktop_%BakDate%\Desktop.ini
    DEL /Q D:\Users\Backup\Desktop_%BakDate%\Desktop.ini

    START /WAIT %SYSTEMROOT%\REGEDIT.exe /S "%Setting%\Profiles.reg"

    RMDIR /Q /S "%USERPROFILE%\Contacts"
    RMDIR /Q /S "%USERPROFILE%\Desktop"
    RMDIR /Q /S "%USERPROFILE%\Documents"
    RMDIR /Q /S "%USERPROFILE%\Downloads"
    RMDIR /Q /S "%USERPROFILE%\Favorites"
    RMDIR /Q /S "%USERPROFILE%\Music"
    RMDIR /Q /S "%USERPROFILE%\Pictures"
    RMDIR /Q /S "%USERPROFILE%\Saved Games"
    RMDIR /Q /S "%USERPROFILE%\Videos"
)


:Type
IF %PROCESSOR_ARCHITECTURE% == x86 (
   GOTO X86
) ELSE ( 
   GOTO X64
)


:X64
START /WAIT %SYSTEMROOT%\REGEDIT.EXE /S "%Setting%\Tweaks_x64.reg"
START /WAIT %Setting%\jre-7u5-windows-x64.exe /s /v"/qn IEXPLORER=1 REBOOT=Suppress JAVAUPDATE=0"
GOTO EOF

:X86
START /WAIT %SYSTEMROOT%\REGEDIT.EXE /S "%Setting%\Tweaks_x86.reg"
START /WAIT %Setting%\jre-7u5-windows-x86.exe /s /v"/qn IEXPLORER=1 REBOOT=Suppress JAVAUPDATE=0"
GOTO EOF

:EOF
DEL /Q %SYSTEMROOT%\Setup\Setting.cmd

第一小段在定義光碟的代號及程式的位置,取得當天日期存入%BakDate%這個變數,並取消系統休眠。

第二段導入Profiles.reg,修改文件夾的預設位置到「D:\Users」去。在導入之前,先判斷是否有D槽的存在(新的硬碟很可能還未分割),若是沒有,跳過此一步驟。接著將舊目錄裏「桌面」這個資料夾移動到「D:\Users\Backup」裏。有些人習慣在桌面上丟一堆東西,若是沒做這個動作,重灌後桌面還是一團亂。因此將舊的桌面移到Backup目錄裏,這樣一來,既有乾淨清爽的桌面,又能在Backup目錄裏檢視之前遺留的資料。最後,刪除「C:\Users\帳號」裏的文件夾。雖然這時巳更改文件夾的位置至D槽,但原本C槽帳號裏的文件夾還存在,開啟檔案總管後會看到重複的文件夾,因此要把「C:\Users\帳號」裏的文件夾做刪除的動作。

第三段取得環境變數,判別目前系統是32位元還是64位元,依據變數,執行相對應的命令。

第四段則是導入系統登錄檔,修改系統環境以更符合我們的操作需求,以及安裝Java或執行其他命令。

最後將此批次檔刪除,彷弗從來不存在一樣…

 

上面的批次檔可以運作的很好,不過還是有一個地方未能處理到,那就是「連絡人」。在導入Profiles.reg後,系統會自動在新的「連絡人」資料夾裏生成"帳號 (數字).contact"這個檔案。這個檔案無法在 FirstLogonCommands的命令裏設定刪除,因為這個動作似乎是最後才完成的,你無法在批次檔裏設定刪除一個還未生成的檔案。

所以,我在回應檔裏的「Microsoft-Windows-Shell-Setup\LogonCommands」這個元件裏,新增一個AsynchronousCommand,Commandline指向「C:\Windows\Setup\Finish.cmd」。也就是我在「C:\Windows\Setup」這個目錄裏多加一個批次檔Finish.cmd,來做這個收尾的動作。

Finish.cmd的內容:

@ECHO OFF

Title Finish

DEL /Q "D:\Users\%USERNAME%\Contacts\%USERNAME% (?).contact"

DEL /Q %SYSTEMROOT%\SetupFinish.cmd

 

以上的動作都完成後,最後就是從整合好的x86和x64映像中提取我們要的檔案,生成新的install.wim。

開啟Gimagex,切換到「Export」頁次,Source來源選擇我們整合好的映像檔,點選「Select」。

 

選擇我們要抽出的版本

 

我們選擇抽出的版本是Professional版,所以「Image」的編號更改變為3。設定輸出的位置、壓縮等級。「Name」欄位可填可不填,最好還是寫上,方便辦識。點選「Exort」輸出新的install.wim。



以上的動作是告訴Gimagex,將"D:\Sources\install_x64.wim"裏Index:3的版本,也就是64位元的Professional版抽出,生成一個新的install.wim。64位元的Professional版在新的install.wim將變成Index:1。重復同樣的動作,「Destination」欄位不變,抽出32位元的Professional版,加入到相同install.wim裏,此時32位元的Professional版在新的install.wim將變成Index:2。

 

切換到「Info」頁次,查詢剛剛生成的install.wim,查看是否正確。

 

建立一個資料夾「addon」,複製以下檔案至此目錄:

addon - - jre-7u5-windows-x64.exe

            - jre-7u5-windows-x86.exe

            - Profiles.reg

            - Tweaks_x64.reg

            - Tweaks_x86.reg

 

以UltraISO開啟32位元的Win7原始光碟,將Autounattend.xml加入到光碟根目錄,install.wim及addon資料夾加入到光碟的sources目錄裏,然後另存新檔。這個新生成的ISO檔就是我們的最終目的。

最後的最後,以VM來實測我們做出來的光碟,是否有達到我們的需求。

 

補充說明:

當你在製作這一類x64+x86的整合光碟時會碰到一個問題:自動回應檔只能有一個,那到底是要用x64的回應檔,還是用x86的回應檔?

之前說過在生成x64的回應檔時,64位元映像檔中包含部份的x86元件,若是一併設定x86元件,雖然也可以適用32位元系統的安裝,但64位映像中x86元件可供設定的值較少,可能無法完全對應你所想要的修改。

因此,最好是把x64與x86的回應檔分開,各自生成相關的元件,最後將這二個回應檔合併,合併後的回應檔既可對應64位元的系統,32位元系統的安裝也沒問題。用文字編輯器開啟回應檔,合併的格式如下:

黃色及藍色的方框,<settings pass= >與</settings>之間是一個段落,存放安裝各個階段的安裝元件。這其中可能只有一個元件,也可能有數個元件。在"所有"x64元件的下方,貼上相對應的x86元件,要注意,位置不要弄錯。最後生成一個新的回應檔,這個新的回應檔就能同時對應x64與x86的安裝。

你可以在這邊下載範例

回應
關鍵字