none
[分享]對之前通過 WDS 部署 Windows XP 映像文件方法的一些更新 RRS feed

  • 常规讨论

  • 本文是對

    [分享]幾個關於 WDS 遠程部署的方法
    http://social.technet.microsoft.com/Forums/zh-CN/ac346be7-3a90-440e-84c7-1c5b98021770/-wds-?forum=windowsserversystemzhchs

    的補充。因爲時間關係,此次描述可能看起來比較亂,請見諒。
    待後面有時間的話,再進行編輯整理。

    包括:

    1. 直接在本地解除對調用 cmd 的限制
    2. 在 Windows XP 下對自動依一定規則重命名計算機的進一步説明


    首先是本地解除 cmd 限制的方法。

    通過進一步嘗試,我發現了解除動作可以通過系統服務來進行。
    首先觀察日誌中服務啓動順序的記錄,我注意到 spooler 服務啓動在 netlogon 服務之前,
    於是通過爲 spooler 設置映像文件調試器(Debugger)

    xcmd /c cscript -nologo -b %WINDIR%\tmp\do_enable_cmd.vbs

    但是發現其會過早在 Windows 安裝程序進行最後清理工作時接觸限制,雖然正常情況下,那個時間很短,輸入命令的時間應該是不夠的,但是總覺的不夠好。
    於是我通過服務的 LOAD_ORDER_GROUP 找到在 netlogon 之前啓動的 scardsvr,雖然實際情況下,netlogon 要早於 scardsvr 啓動,但從測試看是足夠的。
    由於考慮到 scardsvr 在實際情況可能會被使用到,所以將該服務的注冊表配置導出一份,然後修改成一個服務 foosvr

    自動啓動
    不設置調試器,直接將映像文件命令設置爲 xcmd /c cscript -nologo -b %WINDIR%\tmp\do_enable_cmd.vbs
    啓動賬戶爲 LocalSystem
    隨帶修改了一下服務描述。

    説明:
    因爲是在 WDS 服務器上進行的編輯,所以在保存前需要注意其注冊表項路徑,不要寫成了當前系統的。
    該服務雖然在系統日誌顯示執行失敗, 但命令實際上是成功執行的。

    關於 do_enable_cmd.vbs 修改後的代碼,如下

    dim shell, arg, rc
    set shell = createobject("wscript.shell")
    arg = ""
    rc = 0
    arg = "xcmd.exe /c (xcmd /c set | find '__PROCESS_HISTORY=%WINDIR%\system32\setup.exe' 2> nul 1> nul) || (reg delete 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe' /f & xcmd /c @echo [debug] %date% %time% reg_delete_cmd %errorlevel% >> %WINDIR%\tmp\debug.log)"
    arg = replace(arg, "'", chr(34))
    rc = shell.run(arg, 0, true)
    arg = "cmd /c %WINDIR%\tmp\create_firstbat_NT5x.bat"
    rc = 0
    rc = shell.run(arg, 0, false)

    其中的 create_firstbat_NT5x.bat 爲重命名計算機名所用。

    下面説明一下重命名計算機名的相關問題。

    在測試中發現,以本地管理員身份執行的任務計劃在調用 shutdown -r -t 5 不一定能成功,但是以 SYSTEM 方式執行沒有遇到問題,所以仿照 foosvr 創建了一個 reboot 服務, 其主要設置爲

    手動啓動,不能讓其自動重啓。
    映像文件命令 %WINDIR%\system32\shutdown.exe -r -t 5
    延時 5 秒,方便脚本執行清理操作
    以 LocalSystem 執行

    到這裡不能成功重啓的問題就解決了。

    下面是關於 create_firstbat_NT5x.bat 的修改, 代碼如下

    @echo off

    REM 將指定用戶添加到本地管理員組
    net localgroup administrators contoso\admin_group /add
    REM 測試發現該延時爲必要操作,不這樣的話,
    REM 後面的任務計劃的執行者會變成本地管理員
    REM 當然你也可以拷貝并使用 tiemout 命令來替代
    ping -n 11 127.0.0.1 > nul

    REM 刪除臨時文件命令
    REM 對於自製的部署脚本,并不會生成
    rmdir %SYSTEMDRIVE%\$WINDOWS.~BT /s/q
    rmdir %SYSTEMDRIVE%\$WINDOWS.~LS /s/q
    del %SYSTEMDRIVE%\WinPEpge.sys /a/f/q

    schtasks -delete -tn firstbat_NT5x -f
    schtasks -create -tn firstbat_NT5x -tr %WINDIR%\tmp\firstbat_NT5x.bat -sc onstart -ru contoso\helper -rp PASSWORD
    REM schtasks -run -tn firstbat_NT5x

    REM shutdown -r -t 5
    sc start reboot
    del "%0" /a/f/q

    上述命令不立即執行任務計劃,而是重啓是因爲在測試中發現,如果現在直接執行任務計劃,會收到 netlogon 5789 錯誤,祇有機器名重命名成功,而 DNS 名稱失敗。

    firstbat_NT5x.bat

    沒有什麽變動,祇是添加了刪除 foosvr 服務的命令

    sc delete foosvr

    至於最後的清理脚本

    cleanup_helper.bat

    同樣沒有什麽變化,祇是添加了刪除 reboot 服務的命令.

    不過對於作爲任務計劃執行的 firstbat_NT5x.bat 卻有一個問題,當第一次執行時,會報 “工作目錄無效”的錯誤,需要人工手動重啓機器,第二次執行就正常操作。
    這個問題暫時沒有好的方法,好在人工重啓不是複雜的動作。


    Folding@Home

    2014年3月9日 15:44

全部回复