WMI指令碼高手不完全手冊
要成為WMI指令碼高手當要認識一下什麼叫WMI啦,下面將介紹一下有關WMI的東西。
Windows 管理規範(Windows Management Instrumentation)是一項核心的 Windows 管理技術;用戶可以使用 WMI 管理本機和遠端電腦。WMI 通過編程和指令碼語言為日常管理提供了一條連續一致的途徑。用戶可以:
1.在遠端電腦器上啟動一個工作。
2.設定一個在特定日期和時間執行的工作。
3.遠端啟動電腦。
4.獲得本機或遠端電腦的已安裝程序列表。
5.查詢本機或遠端電腦的 Windows 事件日誌。
而WMI適用的運得環境也是有些限制的,WMI 適用於所有最新版本的 Windows。
WMI 附帶在 Windows Me、Windows 2000、Windows XP 和 Windows Server 2003 之中。
對於 Windows 98 和 Windows NT 4.0,可以訪問 http://www.microsoft.com/downloads並搜尋「Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 4.0)」。
注意:在 Windows NT 4.0 上安裝並執行 WMI 之前,需要首先安裝 Service Pack 4 或更高版本。
WMI 需要的其他軟體包括:
1. Microsoft Internet Explorer 5.0 或更高版本。
2. Windows Script Host(WSH)。
Windows 2000、Windows XP、Windows Server 2003、和 Windows Me 附帶的 WSH,而不是 Windows NT4 或 Windows 98 附帶的 WSH。您可以從以下位址下載 WSH http://www.microsoft.com/downloads. WSH 的最新版本—— 包括在 Windows XP 和 Windows Server 2003 之中——是 WSH 5.6。
要使WMI指令碼可以正常的執行,Windows裡的WMI 服務(winmgmt)保證是執行的,這樣才可以實現WMI裡的更多功能。
好了,關於WMI的一些基本的訊息資料就說到這,要想看更多的可以到MicroSoft網站的MSDN找。下面就簡單的講一下WMI指令碼編寫的基本要素,看看下面的程式碼:
//這個指令碼是檢視系統啟動的啟始組態參數,下面我們來看看關於WMI指令碼編寫的架構。
On Error Resume Next
//下面這行是比較重要的,它定義了主機的變數,可以是本地機或遠端主機,域上的機等,參數英文的「.」是表示本地機,要想實現其它機的可以填上其它機的主機名或IP。
strComputer = "."
//下面這行是通過GetObject得到主機的WMI對像管理空間「/root/cimv2」,如果是本地機的是通過NT(Authentication)認證的,所以可以不用用戶名和密碼,而對於非本地機或非域機的就要再加多幾條參數,
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
//執行WMI資料對象的查詢
//至於連接遠端的要用下面的語句
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer(strComputer, "root/cimv2", "administrator", "a")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BootConfiguration",,48)
//利用陣列列出相關
For Each objItem in colItems
Wscript.Echo "BootDirectory: " & objItem.BootDirectory
Next
從上面的例子可以看出寫一個WMI的要求:
1.得到主機的WMI對象管理空間
2.執行WMI資料對象的查詢
3.利用陣列列出相關
學習編寫的架構並不難,只要練多幾次就行了,但是學習WMI的第一個難題就是它的子集對象,因為我們並不知道它的子集對象是什麼,這樣寫起程序來就會力不從心了。
要一下子知道這樣子集的對象也是不難的,只要在MicroSoft的MSDN找找會有不少,但是這樣找下去的話可能要找很久或資料不夠全,是不是有些難呢?
其實MicroSoft公司的網站上有一個叫「Scriptomatic」的工具,才100多K,解壓縮後你們發覺真正有用的是那個才12k的「scriptomatic.hta」文件,雙按開啟後你會發覺是一個子集的資料列表,且還有例子呢。
以上就是查詢「Win32_BIOS」裡的子集參數,是不是很易實現WMI指令碼的編寫呢?
朋友們,可曾記得大半年前是不是有一個這樣的漏洞:
就是一個GUEST用戶權限可以用WMI的指令碼實現加帳號的例子,其實就是一個WMI 命名空間的安全性出現問題。下面我們開啟電腦上的MMC看看如何設定WMI的安全權限。
在執行表單上打「MMC」,然後在「文件」表單上選「增加/移除管理單元」,然後在「獨立」的選擇項(預設值)上按「增加」,之後來到「增加獨立管理單元」列表。
然後就一路按「增加」、「確定」就可以了。返回到MMC的主界面上,然後右擊「WMI」單元選「內容」。
在WMI控件內容對話視窗中按下安全性選項卡。
一個名為Root,前面帶加號(+)的資料夾將會出現。如果必要,展開這個樹狀結構,定位到想要設定權限的命名空間。
按下安全性設定按鈕。一組用戶和權限顯示出來。
如果用戶在這個列表中,請按照需要修改權限。如果用戶不再這個列表中,請按下 增加 按鈕,然後從賬戶所在的位置(本機電腦、域等等)增加用戶。
小提示:
為了檢視和設定 NameSpace 安全性,用戶必需擁有讀取安全性設定 和 編輯安全性設定 權限。系統管理員預設值具備這些權限,並可以按照需要將權限賦予其他用戶如果一個用戶需要遠端訪問命名空間,必須為其選遠端啟用權限。
預設值情況下,針對一個命名空間設定的用戶權限只對該命名空間有效。如果希望用戶可以訪問該命名空間和其下所有子命名空間,或者只能訪問子命名空間,請按下進階按鈕。
按下編輯並在出現的對話視窗中指定允許訪問的範圍。這樣就可以防止此類事情的發生,但是透過此類的WMI命名空間的安全性設定,也可以成為黑手會組態後門的地方,所以在架建一個安全的系統,這裡不能不看。今天的WMI技術就介紹到這裡,文章寫得有些倉促,難免有問題,請各位多多指點小弟。
要成為WMI指令碼高手當要認識一下什麼叫WMI啦,下面將介紹一下有關WMI的東西。
Windows 管理規範(Windows Management Instrumentation)是一項核心的 Windows 管理技術;用戶可以使用 WMI 管理本機和遠端電腦。WMI 通過編程和指令碼語言為日常管理提供了一條連續一致的途徑。用戶可以:
1.在遠端電腦器上啟動一個工作。
2.設定一個在特定日期和時間執行的工作。
3.遠端啟動電腦。
4.獲得本機或遠端電腦的已安裝程序列表。
5.查詢本機或遠端電腦的 Windows 事件日誌。
而WMI適用的運得環境也是有些限制的,WMI 適用於所有最新版本的 Windows。
WMI 附帶在 Windows Me、Windows 2000、Windows XP 和 Windows Server 2003 之中。
對於 Windows 98 和 Windows NT 4.0,可以訪問 http://www.microsoft.com/downloads並搜尋「Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 4.0)」。
注意:在 Windows NT 4.0 上安裝並執行 WMI 之前,需要首先安裝 Service Pack 4 或更高版本。
WMI 需要的其他軟體包括:
1. Microsoft Internet Explorer 5.0 或更高版本。
2. Windows Script Host(WSH)。
Windows 2000、Windows XP、Windows Server 2003、和 Windows Me 附帶的 WSH,而不是 Windows NT4 或 Windows 98 附帶的 WSH。您可以從以下位址下載 WSH http://www.microsoft.com/downloads. WSH 的最新版本—— 包括在 Windows XP 和 Windows Server 2003 之中——是 WSH 5.6。
要使WMI指令碼可以正常的執行,Windows裡的WMI 服務(winmgmt)保證是執行的,這樣才可以實現WMI裡的更多功能。
好了,關於WMI的一些基本的訊息資料就說到這,要想看更多的可以到MicroSoft網站的MSDN找。下面就簡單的講一下WMI指令碼編寫的基本要素,看看下面的程式碼:
//這個指令碼是檢視系統啟動的啟始組態參數,下面我們來看看關於WMI指令碼編寫的架構。
On Error Resume Next
//下面這行是比較重要的,它定義了主機的變數,可以是本地機或遠端主機,域上的機等,參數英文的「.」是表示本地機,要想實現其它機的可以填上其它機的主機名或IP。
strComputer = "."
//下面這行是通過GetObject得到主機的WMI對像管理空間「/root/cimv2」,如果是本地機的是通過NT(Authentication)認證的,所以可以不用用戶名和密碼,而對於非本地機或非域機的就要再加多幾條參數,
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
//執行WMI資料對象的查詢
//至於連接遠端的要用下面的語句
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer(strComputer, "root/cimv2", "administrator", "a")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BootConfiguration",,48)
//利用陣列列出相關
For Each objItem in colItems
Wscript.Echo "BootDirectory: " & objItem.BootDirectory
Next
從上面的例子可以看出寫一個WMI的要求:
1.得到主機的WMI對象管理空間
2.執行WMI資料對象的查詢
3.利用陣列列出相關
學習編寫的架構並不難,只要練多幾次就行了,但是學習WMI的第一個難題就是它的子集對象,因為我們並不知道它的子集對象是什麼,這樣寫起程序來就會力不從心了。
要一下子知道這樣子集的對象也是不難的,只要在MicroSoft的MSDN找找會有不少,但是這樣找下去的話可能要找很久或資料不夠全,是不是有些難呢?
其實MicroSoft公司的網站上有一個叫「Scriptomatic」的工具,才100多K,解壓縮後你們發覺真正有用的是那個才12k的「scriptomatic.hta」文件,雙按開啟後你會發覺是一個子集的資料列表,且還有例子呢。
以上就是查詢「Win32_BIOS」裡的子集參數,是不是很易實現WMI指令碼的編寫呢?
朋友們,可曾記得大半年前是不是有一個這樣的漏洞:
就是一個GUEST用戶權限可以用WMI的指令碼實現加帳號的例子,其實就是一個WMI 命名空間的安全性出現問題。下面我們開啟電腦上的MMC看看如何設定WMI的安全權限。
在執行表單上打「MMC」,然後在「文件」表單上選「增加/移除管理單元」,然後在「獨立」的選擇項(預設值)上按「增加」,之後來到「增加獨立管理單元」列表。
然後就一路按「增加」、「確定」就可以了。返回到MMC的主界面上,然後右擊「WMI」單元選「內容」。
在WMI控件內容對話視窗中按下安全性選項卡。
一個名為Root,前面帶加號(+)的資料夾將會出現。如果必要,展開這個樹狀結構,定位到想要設定權限的命名空間。
按下安全性設定按鈕。一組用戶和權限顯示出來。
如果用戶在這個列表中,請按照需要修改權限。如果用戶不再這個列表中,請按下 增加 按鈕,然後從賬戶所在的位置(本機電腦、域等等)增加用戶。
小提示:
為了檢視和設定 NameSpace 安全性,用戶必需擁有讀取安全性設定 和 編輯安全性設定 權限。系統管理員預設值具備這些權限,並可以按照需要將權限賦予其他用戶如果一個用戶需要遠端訪問命名空間,必須為其選遠端啟用權限。
預設值情況下,針對一個命名空間設定的用戶權限只對該命名空間有效。如果希望用戶可以訪問該命名空間和其下所有子命名空間,或者只能訪問子命名空間,請按下進階按鈕。
按下編輯並在出現的對話視窗中指定允許訪問的範圍。這樣就可以防止此類事情的發生,但是透過此類的WMI命名空間的安全性設定,也可以成為黑手會組態後門的地方,所以在架建一個安全的系統,這裡不能不看。今天的WMI技術就介紹到這裡,文章寫得有些倉促,難免有問題,請各位多多指點小弟。