2011年7月8日 星期五

Windows 7 之 BCD 建立方式

Windows 7 使用也很久了, 之前為了搭配 XPE 的備份使用, 有研究了一下 BCDEdit 的指令, 但用過後, 久沒有使用又遺忘了, 剛好最近在製作快速安裝批次, 所以就順便在找了一下相關的資料, 並將做好的批次貼上來提供存檔^^"

批次檔內容
=================================================================

@Echo off
Color 0a
Mode con cols=48 lines=9
Set UD=100/07/08     By Shyam
Set BCDNAME=啟動 XPE 系統...By Shyam on %date:~0,10%
Set GPATH=\grldr.mbr
Set TIMEOUT=8

:CreateBCD
Echo 檢查是否為系統管理員...
Bcdedit > check_bcd.txt
Type check_bcd.txt | find "Windows Boot Manager" && Goto StartBCD
Del check_bcd.txt 2>nul
Echo.
Echo.
Echo. 請以系統管理者身份執行....
Echo.
Echo.
Goto End

:StartBCD
Type check_bcd.txt | find "%BCDNAME%" && Goto Un_BCD
Bcdedit /create /d "%BCDNAME%" /application bootsector > vid.1
For /f "tokens=2 delims={" %%i in (vid.1) Do Echo %%i > vid.2
For /f "tokens=1 delims=}" %%i in (vid.2) Do Set VID={%%i}
Del vid.*
Bcdedit /set %VID% device partition=%systemdrive%
Bcdedit /set %VID% path %GPATH%
Bcdedit /displayorder %VID% /addlast
Bcdedit /timeout %TIMEOUT%
Goto CreatBootFiles

:Un_BCD
Echo.
Echo 偵測到已安裝 開機選單...系統自動移除中...
Echo.
For /f "tokens=1 delims=:" %%i in ('findstr /n /c:"%BCDNAME%" check_bcd.txt') Do Set VID=%%i
Set /a VID=%VID%-3
Findstr /n ident check_bcd.txt > check_bcd.1
For /f "tokens=2 delims= " %%i in ('findstr /n /c:"%VID%:ident" check_bcd.1') Do Set VID=%%i
Bcdedit /delete %VID% /cleanup
Bcdedit > check_bcd.txt
Type check_bcd.txt | find "%BCDNAME%" && Goto Un_BCD
Del check_bcd.*
Goto End

 :CreatBootFiles
Attrib -r -s -h %systemdrive%\menu.lst
Echo find --set-root /rxpe.bin >> %systemdrive%\menu.lst && Echo chainloader /rxpe.bin >> %systemdrive%\menu.lst
Attrib +r +s +h %systemdrive%\menu.lst

Attrib -r -s -h %systemdrive%\grldr
xCopy /h /y ..\grldr %systemdrive%\
xCopy /h /y ..\grldr.mbr %systemdrive%\
Attrib +r +s +h %systemdrive%\grldr

Attrib -r -s -h %systemdrive%\RXPE.*
xCopy /h /y ..\rxpe.COM %systemdrive%\
xCopy /h /y ..\RXPE.IM_ %systemdrive%\
xCopy /h /y ..\RXPE.SIF %systemdrive%\
xCopy /h /y ..\RXPE.BIN %systemdrive%\
Attrib +r +s +h %systemdrive%\RXPE.*

:End

=================================================================
參考資料:
http://technet.microsoft.com/zh-tw/library/cc709667%28WS.10%29.aspx
http://blog.sina.com.cn/s/blog_67278a3e0100n2px.html  (此批次有錯, 直接執行會有錯誤)

快速修改電腦名稱之方法

相信有很多IT人會遇到電腦名稱的命名問題,怎樣的命名方式,就看公司怎麼規定吧! 因為有遇到更改電腦名稱的問題,所以就搜尋出幾個快速更改的方式。
1. VBS 指令修改( http://social.technet.microsoft.com/forums/zh-TW/winserverzhcht/thread/6e40c437-8697-4387-8f78-b0189237ef6f/)

將以下語法剪下貼到記事本裡,另存成.vbs 檔案, 使用滑鼠去點擊兩下即可。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
err = objComputer.Rename("
要更改的電腦名稱")
Next


netdom renamecomputer 舊電腦名稱 /newname:新電腦名稱 /userd:網域/管理者帳號 /passwordd:管理者密碼 /force /reboot:60

範列:

netdom renamecomputer alex-nb /newname:mary-nb /userd:abc.com/administraotr /passwordd:123456 /force /reboot:60
                /force 是不詢問直接更改名稱
          /reboot 是多少秒後重新開機
以上兩種方式我都使用過,第一種比較簡單,但失敗率蠻高的,不知道有什麼地方有限制,第二種的方式雖然比較麻煩,但很容易就成功了,搭配.cmd 的方式使用,可以達到無提示訊息。
將下列存成.cmd 點擊完後即更名不提供也不重新開機

netdom renamecomputer alex-nb /newname:mary-nb /userd:abc.com/administraotr /passwordd:123456 /force /reboot:60
shutdown -a