RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [轉貼] 以批次指令碼自訂 WINDOWS 企業桌面部署   字型大小:||| 
jocosn
白銀驢友
等級: 15等級: 15等級: 15等級: 15等級: 15


今日心情

 . 積分: 1386
 . 精華: 2
 . 文章: 2945
 . 收花: 9537 支
 . 送花: 3671 支
 . 比例: 0.38
 . 在線: 1295 小時
 . 瀏覽: 19041 頁
 . 註冊: 7244
 . 失蹤: 1246
#1 : 2006-6-21 04:34 PM     只看本作者 引言回覆

以批次指令碼自訂企業桌面部署

學習使用批次檔案來自訂您的桌面部署。TechNet 強力推薦您也造訪指令碼中心,學習使用 Microsoft Visual Basic Scripting Edition (VBScript)、Windows Script Host (WSH) 和其他各種指令碼技術,來建立自訂解決方案。


使用批次指令碼進行自訂作業
Microsoft Solution Accelerator for Business Desktop Deployment (BDD) 不但靈活,自訂性也相當強。Solution Accelerator for BDD 含有多種工具協助您入門,但是針對您的需求而自訂 Solution Accelerator 的功能,才是它最大的長處。我很喜歡使用批次指令碼,我將在本文提供幾個範例,告訴您使用這些指令碼來自訂 Solution Accelerator for BDD 有多麼簡單。

批次 (或 Shell) 指令碼是一份命令清單,儲存在副檔名為 .bat 或 .cmd 的純文字檔中。比方說,您可以將公司專屬的設定步驟儲存在一個批次指令碼中,然後再執行這個指令碼,這樣就不必以互動方式一一輸入所有的命令。許多系統管理員忽視了批次指令碼,以為它們的整體功能只限於與其他指令碼語言相關的功能。這一點我不同意:就像每一種工具都有自己專屬的用法一樣,指令碼語言也是。

由於批次指令碼相當單純,因此您可以輕鬆地用它來自訂 Solution Accelerator for BDD,並且將安裝過程自動化 (事實上,Solution Accelerator for BDD 有很大一部分都是批次指令碼)。這些指令碼不見得很複雜。Solution Accelerator for BDD 最適合使用這些指令碼來執行單一作業,以方便您選擇個別作業。

若要充分發揮批次指令碼,請建立指令碼,將重複且經常執行的作業自動化。例如,使用者設定以及遠端存取的設定 (遠端桌面和遠端協助)。這些案例的一般目的,是要經由一致且可以重複的方法提供自動化功能,將人為錯誤減至最低。


批次指令碼的基本功能
大部分的資訊技術 (IT) 專業人員,多半都很熟悉批次指令碼的基本原則。您只要建立一個文字檔,將副檔名取為 .bat 或 .cmd,然後在其中輸入命令清單即可。

其實批次指令碼的功能不只如此。首先,批次指令碼中有各種命令列工具可以使用。如果您在說明及支援中心搜尋「批次檔」或「命令列」,還會找到可用命令的其他相關資訊。如需特定命令的相關資訊,請輸入該命令,後面再加上 /?。您可以在命令列參照中 (英文  http://www.microsoft.com/resourc ... /en-us/ntcmds.mspx),找到一份命令清單及其說明和語法。Microsoft Windows Desktop Deployment Resource Kit (英文  http://www.microsoft.com/MSPress/books/6562.asp) 中也有批次指令碼的討論以及一個命令附錄。

第二,批次指令碼支援控制執行作業的命令。這些命令包含條件式命令和迴圈命令,讓批次指令碼的功能更加強大。在本文中,我將著重說明一些可以在指令碼產生立即結果的命令 (不過,我不會討論每一個命令的語法)。[表 1] 說明了比較有趣的批次指令碼命令。若要學習每一個命令的語法,請在命令提示輸入命令名稱,後面加上 /?。


[表 1] 命令批次指令碼命令
命令 call
用途 呼叫另一個指令碼,再回到下一個陳述式。
範例  • 呼叫另一個檔案中的批次指令碼。
    • 呼叫目前檔案中的一個副程式。


命令 for
用途 重複一個命令,列出檔案或字串清單。
範例  • 重複一個命令,列出儲存在文字檔中的檔案清單。
   • 重複一個命令,列出另一個命令所輸出的檔案清單。
   • 重複一個命令,列出以逗號分隔的字串清單。


命令 goto
用途 前往批次指令碼的另一個部分。
範例  • 無條件的分支到批次指令碼的另一個部分。


命令 if
用途 有條件的執行命令。
範例 • 測試檔案是否存在。
   • 測試環境變數是否含有特定的值。
   • 測試命令列選項是否存在,或者是否含有特定的值。
   • 測試之前執行的命令,找出錯誤。


命令 setlocal
用途 設定擴充命令和延遲擴充。
範例 • 啟用或停用擴充命令。
   • 啟用或停用延遲環境變數擴充。


命令 start
用途 啟動外部程式,控制其執行。
範例 • 以高優先順序執行程式。
   • 在最小化視窗中執行程式。


命令 wmic
用途 查詢 Windows Management Instrumentation (WMI) 資料。
範例  • 在環境載入 WMI 資料;然後在批次指令碼中使用那些資料。

注意:  大多數執行衍生性作業的批次指令碼,都必須具備管理員權限以防止錯誤發生。在大部分的情況下,您在登錄或檔案系統中設定的項目,都必須具備這些較高權限,尤其在鎖定環境中。


以批次指令碼建立自訂動作
Solution Accelerator for BDD 中的自訂動作,只是您在建置磁碟影像時所完成的作業。而我就是利用批次指令碼來完成這些作業。下面各例所示範的,是可以當作自訂動作使用的批次指令碼。

範例 1:自訂命令提示視窗屬性
[列表 1] 中的指令碼,是使用 reg 命令來自訂 [命令提示] 視窗屬性。這個簡單的範例,將告訴您如何從批次指令碼編輯設定。

[列表 1] Reg.exe
@echo OFF
REM Configuring command prompt
reg add HKCU\Console /v "QuickEdit" /t REG_DWORD /d 1 /f

reg 命令是使用批次指令碼來編輯登錄的最佳方法。您可以使用 reg 命令,以登錄編輯器執行任何作業。舉個例來說,您可以讀寫值、刪除值以及載入和卸載群組檔案。如果您想進一步瞭解 Microsoft Windows XP 作業系統所附隨的這個命令,請在命令提示輸入 reg /?。

範例 2:自訂登錄搜尋/儲存值供日後使用
[列表 2] 是另一個使用 reg 命令的範例。它會查詢登錄,並且使用傳回的值,有條件的執行其他作業。在這個範例中,指令碼會識別它是否在 Tablet PC 上執行,然後加以分支。

[列表 2] 執行條件式作業的 Reg.exe
@echo off
rem Test for a Tablet PC registry key

reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Tablet PC\Ident" >NUL && set TABLETPC=YES

if %TABLETPC%==YES goto TABLET
goto OTHER

:TABLET
rem Do Tablet PC configuration
goto :EOF

:OTHER
rem Do other configuration
goto :EOF

第 3 行的命令可以分成兩部分:

• reg 命令,該命令執行 query作業。這個指令碼會搜尋 Ident 登錄子機碼。如果子機碼不存在,reg 命令便會傳回錯誤。

• 條件的測試。這些 && 符號表示已經順利完成前一個命令。如果 reg 命令找到登錄子機碼 (因而沒有導致錯誤發生),便會執行 set 命令。如果 reg 命令找不到這個子機碼 (因而導致錯誤發生),就不會執行 set 命令。


您現在已經定義一個可稍後用在指令碼中的變數。下一個命令會決定TABLETPC 的值是否等於 YES。

範例 3:自訂複製檔案到本機系統
[列表 3] 的範例比較複雜。它將 WMI 資料載入到環境中,以便讓您將之用在批次指令碼中。首先,指令碼將 wmic 命令與 for 命令搭配使用,以載入環境變數。wmic 命令會針對每一個值,以 name=value 格式分別輸出一行。指令碼再使用 for 命令,針對輸出的每一行重複 set 命令,將輸出附加在 set 命令後面,充分利用這個格式。這麼一來,所有的 Win32_OperatingSystem 值都在 OS.Name 變數中,而所有的 Win32_SystemEnclosure 值都在 ENC.Name 變數中。能夠從批次指令碼使用 WMI 值,是相當強大的功能。

[列表 3] 讀取和使用 WMI 值
@echo off
rem Test for a Tablet PC registry key

rem Dump WMI values in the environment.

for /f "delims=/" %%i in ('wmic PATH Win32_OperatingSystem GET /VALUE') do set OS.%%i >NUL
for /f "delims=/" %%i in ('wmic PATH Win32_SystemEnclosure GET /VALUE') do set ENC.%%i >NUL

goto %ENC.ChassisTypes%

echo "This is an unknown chassis."
goto :EOF

:{3}
:{4}
:{5}
:{6}
:{7}
:{15}

echo "This is a desktop chassis."
goto :EOF

:{8}
:{10}
:{12}
:{14}
:{18}
:{21}

echo "This is a laptop chassis."
goto :EOF

:{23}

echo "This is a server chassis."
goto :EOF



實驗批次指令碼
批次指令碼可以減輕系統管理員的負擔,只是沒有被充分利用罷了。一個正常運作、經過適當測試的指令碼,可以幫助您減少錯誤、提高效率,並且節省寶貴的時間,用在其他工作上。

Microsoft 網站、說明及支援中心以及命令列說明都有許多資源可以使用,這些資源都會提供資訊,幫助您進一步瞭解批次指令碼。除了屬於 Windows XP 作業系統的命令之外,您還可以在 Windows XP 安裝 CD 的 Support Tools 資料夾中,找到其他命令列工具。


http://www.microsoft.com/taiwan/ ... icles/031006rr.mspx



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
陽だまり
白銀驢友
等級: 15等級: 15等級: 15等級: 15等級: 15
ささらの可愛さは異常

 . 積分: 1330
 . 精華: 1
 . 文章: 3159
 . 收花: 10387 支
 . 送花: 26639 支
 . 比例: 2.56
 . 在線: 4508 小時
 . 瀏覽: 30308 頁
 . 註冊: 7228
 . 失蹤: 1236
 . 星の彼方
#2 : 2006-6-21 07:02 PM     只看本作者 引言回覆

老實說
自從改用win2k後,再也沒碰過批次檔了

以前用win98為了自行製作dosv開機還研究了很多
果然hg的威力不可擋



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
tonykaotw
驢手小試
等級: 2


今日心情

 . 積分: 9
 . 文章: 56
 . 收花: 21 支
 . 送花: 420 支
 . 比例: 20
 . 在線: 211 小時
 . 瀏覽: 6168 頁
 . 註冊: 7095
 . 失蹤: 719
#3 : 2006-7-23 02:06 AM     只看本作者 引言回覆

好像在寫DOS的BATCH FILE 喔!! 真熟析


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-4-27 10:01 PM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.028913 second(s), 6 queries , Qzip disabled