ymtien
初级用户
 
积分 36
发帖 11
注册 2006-9-26
状态 离线
|
『楼 主』:
DOS COMMAND編寫對遠端多台主機檔案進行更新的腳本
前言:
在管理Winodw系統主機時,我們常會利用到DOS Command 指令或是wsh(Windows Script Host)之類的指令語法編寫管理用的Scripts,進階一點的管理者甚致會自己利用vbscript、javascript、vb等程式語言編寫所需的管理程式工具,在管理多台遠端主機時,我們常會需要做檔案更新的工作,但如果是管理10台、20台或是更多主機時,如果一台一台的更新,那會是很煩人又很浪費時間的工作,如果對程式不太熟,或是就算用工具軟體來做更新的工作,但如果是需付費的也有版權的問題,這邊我自己編寫了一個利用DOS Command編寫的一個DOS Scripts提供需要的朋友!
實 作:
一.準備工作:
1.首先我們在Maintain用的主機和其它你每天要管理的主機上建立一組有讀取權限的帳號讓管理主機可以讀取其它主機。
2.在防火牆及被管理主機上請開放遠端共享給Maintain用的主機。
二.再來介紹這個scripts的組成檔案有那些
1. ip.ini ---> 這個檔案是記錄我們要更新的主機有那些,把你要更新的主機ip和Hostname加到這個檔案裡並命名為ip.ini存檔就可以了。
--------------------------------------檔案內容 ------------------------------------
192.168.1.1WEB1
192.168.1.2WEB2
192.168.1.3WEB3
---------------------------------------------------------------------------------------
2. Log資料夾 --->這是要放置log記錄檔的資料夾,建立一個叫Log的資料夾就可以了。
三.接下來就是程式主體了
3. Start_Update.bat ---> 這支Scripts是我們要執行更新工作的檔案,把以下原始碼copy起來存成Start_Update.bat並存檔。
--------------------------------------原始碼 ------------------------------------
@echo off
:input_source
mode con lines=30
title 遠端主機檔案更新程序
color 1f
cls
echo-------------------------------- 執行檔案更新程序 -----------------------------
echo請選擇執行項目後按[Enter]鍵執行
echo開始更新請按 (1) 遠端主機列表請按 (2)
echo說明請按 (3) 查看更新記錄請按 (4) 退出請按 (0)
echo-------------------------------------------------------------------------------------
set source=:
set /p source=請輸入執行項目:
set "source=%source:"=%"
:: 上面這句為判斷%source%中是否存在引號,有則剔除。
if "%source%"==":" goto input_source
if "%source%"=="0" exit
if "%source%"=="1" goto update
if "%source%"=="2" goto list
if "%source%"=="3" goto readme
if "%source%"=="4" goto log
set id =
:update
start Start_Update.bat
cls
mode con lines=35
color 8e
title 遠端主機檔案更新
echo-------------------------------------------------------------------------------------
echo--- 即將開始對以下位置遠端主機進行檔案更新 ---
echo確定請按[Enter]
echo-------------------------------------------------------------------------------------
echo -------------------------------------------------------------------------------------
type ip.ini
echo -------------------------------------------------------------------------------------
pause>nul
del Log\*.txt
FOR /F "eol=;" %%i in (ip.ini) do sync.bat %%i %1
pause>nul
goto input_source
:list
cls
mode con lines=30
color 8e
title 更新主機列表
echo------------------------------------------------------------------------------------
echo--- 遠端主機列表 ---
echo------------------------------------------------------------------------------------
echo------------------------------------------------------------------------------------
echo 主機IP:主機名稱:
type ip.ini
echo------------------------------------------------------------------------------------
echo請按任意鍵返回上一步...
pause>nul
goto input_source
:readme
cls
mode con lines=30
color 8e
title 操作說明
echo-----------------------------------------------------------------------------------
echo--- 操作說明 ---
echo1. 如果要新增或刪除更新的主機位置,請直接修改IP.INI檔。
echo2. 修改上傳檔案主機檔案位置,請修改sync.bat的第十三行
echoxcopy c:\你自定的檔案位置\*.*Z:\/s /e /y /z /f
echo將 " c:\你自定的檔案位置\ "改為上傳檔案的放置位置。
echo
echo3. 修改遠端主機上檔案的放置位置,請修改sync.bat的第七行
echonet use "Z:\\%1\c$\update" 遠端主機檔案放置位置。
echo-----------------------------------------------------------------------------------
echo請按任意鍵返回上一步...
pause>nul
goto input_source
:log
cls
mode con lines=42
color 8e
title 更新主機列表
echo-----------------------------------------------------------------------------------
echo--- 檔案更新記錄 ---
echo-----------------------------------------------------------------------------------
type Log\synclog.txt
echo請按任意鍵返回上一步...
pause>nul
goto input_source
4. sync.bat --->這支是執行程式要呼叫執行檔案更新的Scripts, 把以下原始碼copy起來存成Start_Update.bat並存檔。
說明:
1. xcopy c:\test\*.*Z:\/s /e /y /z /f 這行請修改為你要上傳檔案的放置位 置。
2. net use z: \\%1\c$\update 這行請修改為你要上傳檔案放置在遠端主機上的位置, 要上傳檔案的所有主機,檔案放置位置一定要一致
-------------------------------------原始碼 ------------------------------------
@echo off
rem ****************************************************************
rem *File Name : SYNC.BAT*
rem *Update the files by xcopy command*
rem ****************************************************************
net use z: \\%1\c$\update
echo Server IP:%1 >> Log/synclog.txt
date/T >> Log/synclog.txt
time /T >> Log/synclog.txt
echo ----------------------------------------------------------------
@echo on
xcopy c:\test\*.*Z:\/s /e /y /z /f
@echo off
rem ----- Error Messages --------------------------------------------
if errorlevel 1 goto nofiles
if errorlevel 2 goto abort
if errorlevel 4 goto lowmemory
if errorlevel 5 goto write_error
if errorlevel 0 goto succeed
:succeed
net use z: /delete
echo %1: Update is succeed! >> Log/synclog.txt
echo *******************************************************************
echo %1: Update is succeed!
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto finish
:nofiles
echo %1: Can't find files of the update data! >> Log/synclog.txt
echo *******************************************************************
echo %1: Can't find files of the update data!
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto quit
:abort
echo %1: The copy operation is end by the user![CTRL+C] >> Log/synclog.txt
echo *******************************************************************
echo%1: The copy operation is end by the user![CTRL+C]
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto :quit
:lowmemory
echo %1: Out of Memory or Out of drive space! >> Log/synclog.txt
echo %1: Can't find drive or command error !>> Log/synclog.txt
echo *******************************************************************
echo%1: Out of Memory or Out of drive space!
echo%1: Can't find drive or command error !
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto quit
:exit
echo %1: Write error!>> Log/synclog.txt
echo *******************************************************************
echo %1: Write error!
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto quit
:quit
net use z: /delete
echo %1: Update faild!>> Log/synclog.txt
echo *******************************************************************
echo %1: Update faild!
echo *******************************************************************
echo -------------------------------------------------------------- >> Log/synclog.txt
goto finish
:finish
echo%1:檔案已更新完畢...
echo ----------------------------------------------------------------------------------
五.測試看看囉:
全部都設定ok之後,在管理主機上執行Start_Update.bat這支Scripts,就會自動把你要更新的檔案全部上傳到所有需要更新檔案的主機上囉,幾十台主機不到幾分鐘就全部更新完畢,如果再加上排程,還可以自定更新時間喔!是不是很方便又很簡單呢!
作者:小田仔 2006/10/15
|
|