普遍使用的Windows 腳本語言和平台就包括Windows shell 腳本
Visual Basic 腳本(VBS)和Jscript
這些我在以前的一篇文章中討論過
下面我們將對Windows shell 腳本與網絡管理相關的部分進行深入的了解
該討論的目的是使大家對使用Windows命令行有一個基本的了解
包括參數和轉換
例如下面的命令
del myfile
txt /f
在這裡
del
是命令
myfile
txt
是參數(其為del命令提供了需要的信息)
還有
/f
轉換
它修改了該命令
使其強迫只讀文件的刪除
登錄腳本
最普遍用到的shell 腳本可能就是登錄腳本了
一個登錄腳本被用作在登錄的時間為一個用戶配置Windows環境
而且通常專門用於一組用戶
舉個例子來說
金融組的成員可能自動映像網絡驅動器到金融網絡共享文件夾
而行銷組可能自動映像網絡驅動器到行銷網絡共享文件夾
為了實現這個
需要為每一個用戶或成員組創建一個腳本
然後復制到合適的服務器位置(該位置基於Windows版本不同而不同)
在Windows NT
腳本文件通常放在C:\Winnt\System
\Repl\Export\Scripts(或者是Import
這依賴於你配置時復制的位置)
然後
你在用戶說明屬性對話框中指向那個文件
當使用活動目錄時
你經由一個群組策略(Group Policy)配置注冊腳本
首先
將腳本文件復制到Sysvol子目錄
圖A顯示了在哪裡訪問這個子文件夾
圖A
在Sysvol目錄下找到 Scripts文件夾
注意
你也可以選擇用於下網
啟動和關閉的腳本
然後你可以為包括那個腳本的給定容器直接編輯組策略對象
如圖B所示
圖 B
在活動目錄中一個特定容器中編輯腳本
登錄腳本中的命令
在一個腳本中最常用的命令是NET USE
它正好是許多可用的NET命令的一個子集
NET USE命令允許你建立驅動器映射
當在一個登錄腳本中使用該命令時
它可以將該驅動映射到一個特定用戶或組用戶
例如
假設行銷部門需要一個驅動器映射到Server
上的行銷文件夾
另一個驅動映射到Server
上的管理員文件夾
而且再需要一個驅動映射到Server
上的共享
home folder
中的個人用戶的home文件夾
以下是一個例子
NET USE F: \\server
\marketing PERSIST:NO
NET USE G: \\server
\admin PERSIST:NO
NET USE H:
\\server
\home folder\%username%
PERSIST:NO
每行末的關鍵字PERSIST表示在下一次啟動的時候是否重新連接驅動器映射
通常
你不想讓這種情況發生
原因是另一個用戶可能需要不同的驅動映射
你也應該注意第三行
首先需要引用標記
第二
使用環境變量%username%
當一個用戶登錄時
用戶名被臨時存儲並可以被Windows shell使用
(為了驗證這一點
你可以運行echo %username命令
這將輸出你的登錄名
)如果每一個用戶擁有與那個人的登錄名相同的文件夾
你可以使用那個自動映射到根文件夾
%username%變量是由Windows自動創建並且將經常用到的幾個環境變量之一
你可以通過在命令行使用set類型設置而看到一個完整的列表
你也可以用這個命令創建你自己的變量
要想搞清楚怎麼做
可以設置set /?來進行查看
Windows命令
要想看到一個完整的命令列表以及關於如何使用它們的信息
可以參考Windows Help
如果你使用Windows
系統
點擊開始|幫助
在搜索標簽裡輸入command reference
選擇你要顯示的主題
雙擊命令參考主頁
在Windows NT中
點擊開始|幫助
在搜索標簽裡輸入command
然後在Pick A Topic下
選擇命令索引並點擊顯示按鈕
另外一個有用的登錄腳本命令是NET TIME
它將使得一個網絡上的時間同步於服務器上的時間
在該命令裡
你可以使用一些轉換
而且你也可以在Windows Help中檢查該命令
如下是最簡單的使用NET TIME
NET TIME \\timesvr
/SET /YES
這個告訴該計算機與名稱為timesvr
的服務器的時間同步
/YES轉換指示它強制同步
即使被命名的服務器不是一個時間源服務器
在以後的文章裡我將討論一些在腳本中有用的編程結構
包括條件處理
這裡看到的是條件處理的大體框架
如果Novell NetWare操作系統中的管理員是使用狀態IF MEMBER OF的一定組的成員
那麼該管理員將樂忠於告訴登錄腳本做什麼
盡管在Windows腳本中沒有這樣的狀態可用
但是有兩種可能的工作區
這要依賴於你在管理一個Windows NT區域還是用活動目錄管理一個Windows
域
Windows NT Resource Kit包含一個名叫IFMEMBER
EXE的工具
這個可以作為NetWare IF MEMBER OF被用於相同的目的
不過它的使用相當的復雜
仍需要另一個稱作為ERRORLEVEL的架構
以下介紹其工作原理
讓我們假設登錄的用戶既是行銷組的成員又是管理員組的成員
你想要設置一塊只有行銷管理員才可以訪問的共享區域
首先
你要包含如下命令行
IFMEMBER marketing managers
IFMEMBER工具(假設其處於一個搜索路徑中)將檢查所有組中的成員
然後退出並將用戶的特定變量ERRORLEVEL的值設定為包含該用戶的組數目
在這個例子中
那個數目應該是
因此整個過程如下所示
IFMEMBER marketing managers
IF NOT ERRORLEVEL
EXIT
NET USE J: \\SERVER
\MKTGMGR /PERSIST: NO
如果該用戶是兩個組的成員
ERRORLEVEL中存的值將是
如果值不是
腳本將執行完畢
但是如果值是
它將執行下面的狀態
IFMEMBER
EXE也可以用於Windows
環境中
但是如果你使用活動目錄
你會另作選擇
不是在登錄腳本中的參考組
你可能按照以上組相同行設計你的組織單元
這樣你可以對應於每一個OU創建組策略對象
同時該OU擁有一個專門登錄腳本
不必使用IFMEMBER工具
Shell腳本用於其他用途
就像我以上提到的
設計登錄腳本用於每一次用戶登錄該網絡時被調用
然而
例如假設你的組織剛剛利用地理信息系統(GIS)完成了工作
任何GIS包括大量的形狀類型的文件和圖像
通常位於一個復雜的目錄數據結構中
如果被安裝於本地
它們將最好地運作
因此你決定復制這些文件
將完整的目錄從一個網絡共享保存到每一個工作站的本地硬件驅動器上
當然
你也可以打開DOS命令行
手工進行測試
顯然這將大大簡化寫一個包含每一個需要考慮的命令的腳本
使用COPY命令或是更通用的XCOPY命令
你可以創建一個腳本完成該工作
復制它到一個可移動的介質上
如軟盤
並且通過敲擊一個簡單的命令在每一個位置運行該腳本
好處有兩點
這將節省你的時間
因為你不必在每個工作站敲擊每個命令
這將有助於避免由於誤敲擊一個命令或路徑名而導致的錯誤
最好的實踐方法
當你寫Windows shell 腳本時
你應該記住以下幾點
在你將你的腳本用於產品化階段之前一定要進行測試
一直要文檔化你的腳本
即使它們非常簡單
當一個腳本遇到關鍵字REM
它將忽略那一行
因此
你可以使用該關鍵字為你的腳本增加注釋
至少你應該包括該腳本的目的
日期和作者名字
記住對你來說很明顯的東西對別人來說可能不是這樣
而且過了一年以後你也會不清楚了
記住當你的腳本運行時
其中的每一個命令行將顯示在屏幕上
除非是你使用命令@ECHO OFF改變該特性
繼續
要想熟練掌握Windows shell 腳本
你需要了解可用的命令行及其語法
你可以參考Windows Help來對命令進行學習
對每一個命令有一個總體認識並找出可以幫助你完成任務所需的那些命令
每一個命令有一個相關主題連接
通常包括兩個連接
一個提供使用該命令的例子
一個是關於該命令更多的注釋
此外
你應該盡可能多得不斷嘗試使用不同命令和選項直至對此精通熟練
不要擔心犯錯
這是了解各個變量最好的方法
From:http://tw.wingwit.com/Article/Network/201311/29977.html