wmic

WMIC擴展WMI,提供了從命令行接口和批命令腳本執行系統管理的支持。在WMIC出現之前,如果要管理WMI系統,必須使用一些專門的WMI套用,例如SMS,或者使用WMI的腳本編程API,或者使用象CIM Studio之類的工具。

Windows Management Instrumentation Command-line(Windows管理規範命令行)

什麼是WMIC?

WMIC擴展WMI(Windows Management Instrumentation,Windows管理規範) ,提供了從命令行接口和批命令腳本執行系統管理的支持。在WMIC出現之前,如果要管理WMI系統,必須使用一些專門的WMI套用,例如SMS,或者使用WMI的腳本編程API,或者使用象CIM Studio之類的工具。如果不熟悉C++之類的程式語言或VBScript之類的腳本語言,或者不掌握WMI名稱空間的基本知識,要用WMI管理系統是很困難的。WMIC改變了這種情況,為WMI名稱空間提供了一個強大的、友好的命令行接口。
WMIC比WMI簡單、直觀得多,這主要是由於使用了別名(Alias)。別名機制獲取用戶在命令行上輸入的一些簡單命令,按照預定義的方式操作WMI名稱空間,例如根據一個簡單的WMIC別名Get命令構造出一個複雜的WMI查詢語言(WQL)命令。從這個意義上看,別名是用戶和名稱空間之間一個簡化操作的中間層。例如,如果在WMIC命令行上執行下面這個簡單的WMIC命令,就可以獲得用戶帳戶的基本信息:
useraccount list brief
在上面的命令中,Useraccount別名執行了一個Win32_Useraccount類的WQL查詢,以文本的形式顯示出從該類提取的信息。另外,WMIC還以文本的形式顯示出Win32_Useraccount類的屬姓。除了文本形式的輸出之外,WMIC還能夠以其他形式返回命令執行結果,例如XML、HTML或者CSV(逗號分隔的文本檔案)。
WMIC以WMI模式中類的實例的形式保存別名。默認的別名類——MSFT_CliAlias,以及其他支持WMIC的類保存在模式的默認名稱空間,或者說root\cli角色。角色可以簡單地看成專門用來支持WMIC的另一個WMI名稱空間。默認角色root\cli連線到root\cimv2名稱空間,操作root\cimv2之內的類。雖然使用WMIC時一般不需要用到CIM Studio,但CIM Studio可以用來方便地查看root\cli名稱空間
你可以向root\cli名稱空間和其他名稱空間加入新的別名,還可以用Class和Path命令直接訪問WMI名稱空間,本文後面將詳細說明Class和Path命令。

運行WMIC

執行“wmic”命令啟動WMIC命令行環境。這個命令可以在XP或 .NET Server的標準命令行解釋器(cmd.exe)、Telnet會話或“運行”對話框中執行。這些啟動方法可以在本地使用,也可以通過.NET Server終端服務會話使用。
第一次執行WMIC命令時,Windows首先要安裝WMIC,然後顯示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以互動的方式執行。例如,執行下面的命令將關閉正在運行的Outlook:
process whereinnerlink" href="/wiki/outlook.exe">outlook.exe" call terminate
命令運行結束後,WMIC命令行提示符重新出現。
WMIC也可以按照非互動的模式運行。如果要執行某個單步的任務,或者運行批命令中的一系列WMIC命令,非互動模式就很有用。要使用非互動模式,只要在同一個命令行上啟動WMIC並輸入要執行的命令就可以了。例如,執行cmd.exe打開一個命令行視窗,然後執行下面的命令,就可以輸出連線到MACHINE1的印表機清單:
wmic /node:MACHINE1 printer list status
在這個例子中,第一個操作是啟動WMIC,然後是根據/node參數建立一個到MACHINE1的遠程連線,最後執行一個WMIC命令顯示出印表機狀態信息。命令運行結束後,返回到Windows命令行提示符狀態。
安裝了WMIC的機器可以連線到任何一台安裝了WMI的機器,被連線的機器不需要安裝WMIC。例如,從一台運行Win XP Pro的機器啟動WMIC,可以連線和管理所有賬行著XP、Win2K、Windows NT 4.0、Windows Me和Windows 9x的機器。

WMIC命令行構成

WMIC提供了大量的全局開關、別名、動詞、命令和豐富的命令行幫助增強用戶接口。全局開關是適用於整個WMIC會話的配置選項。例如,/trace:on開關啟用錯誤跟蹤機制,如果這個開關處於打開狀態,WMIC返回每一個命令的錯誤信息。利用/note開關可以訪問遠程機器,/interactive:on開關要求WMIC在執行刪除操作之前提示確認,其他的全局開關還包括/role、/user、/implevel以及/namespace。
如前所述,別名是用戶和WMI名稱空間一個簡化語法的中間層。當你指定一個別名時,動詞(Verb)表示要執行的動作。例如,前面例子中的List和Call就是兩個動詞的例子。表一描述了其他一些WMIC動詞,並為每一個動詞給出了例子。
表一:WMIC動詞
動詞 例子 說明
Assoc group where name= 'administrators' assoc 顯示出Administrators組與系統的所有關聯,包括Administrators組成員等。
又如,os assoc顯示出有關作業系統的信息和已經安裝的補丁。
Create environment create name="progloc", username="work01\User1",variablevalue= "%programfiles%\prog01" 創建一個名字為Progloc的變數,把它的值設定為Program Files資料夾的一個子資料夾,把這個變數加入到Work01工作組計算機User1帳戶。
Delete environment where(name= "progloc") delete 刪除Progloc環境變數。測試WMIC命令時,為了防止意外地刪除,可以使用/interactive:on全局開關,這時刪除之前會要求確認。
Get partition get bootpartition, description, deviceid, bootable 返回分區是否可啟動、描述信息和設備ID屬姓等信息。
Set path WIN32_USERACCOUNT where(name="user01") set disabled="true" 在成員伺服器或工作站上禁用User01用戶帳戶。
命令用來控制對WMIC和WMI名稱空間的訪問。注意表一的最後一個例子,這個例子用的是Path和Win32_USERACCOUNT類,而不是Useraccount別名。Path是一個直接訪問WMI名稱空間中實例的命令,不必再通過別名訪問。如果待執行的系統管理任務沒有現成的別名可用,Path命令特別有用。雖然你可以用新的別名和角色擴展WMIC,但如果你對WMI名稱空間比較熟悉,使用Path命令也很方便。
除了Path命令之外,WMIC還支持Class、Context、Quit和Exit命令。Class命令用來直接訪問WMI模式內的類或創建現有類的實例。Class命令和Path命令的不同之處在於,Path命令的作用對象是實例以及它的屬姓(例如,提取管理用的信息),而Class命令的作用對象是類的定義。例如,如果要提取出WIN32_SOFTWAREELEMENT類的所有屬姓,可以執行如下命令:
class WIN32_SOFTWAREELEMENT get
這個命令的輸出是HTML格式,稍後我們將了解如何用/output全局開關把輸出重定向到可用瀏覽器打開的HTML檔案。Class命令加上Assoc動詞能夠顯示出類的名稱空間路徑以及其他與該類關聯的類。利用Class命令可以刪除類、創建類的實例,但不能創建類。
Context命令顯示出全局開關的當前設定。Quit和Exit命令用來退出WMIC命令提示符環境,返回以前的Shell環境(例如Telnet環境,或XP的命令行提示符環境)。
命令行幫助是熟悉WMIC的有效途徑。表二是在WMIC提示符下查找信息的常用命令:
表二:命令行幫助
命令 例子 說明
/? 或 -? 顯示所有全局開關和別名的語法
/ /? /user /? 顯示指定全局開關的信息
/? class /? 顯示某個命令的信息
/? memcache /? 顯示某個別名的信息
/? temperature get /? 顯示別名與動詞組合的信息
/?:Full irq get /?:Full 顯示動詞的幫助信息

實踐套用

以上我們了解了WMIC命令行環境的基礎知識,下面來看看如何用批命令運行WMIC,以及把輸出結果定向到控制台或HTML、XML檔案。從批命令檔案運行WMIC的好處在於不需要重複輸入一系列複雜的命令,例如,下面是一個批命令檔案的內容,它的作用是顯示出MACHINE1和MACHINE2這兩台機器的CPU信息,輸出結果顯示在控制台上。/format開關是面向動詞的開關,而不是全局開關,它只用於Get和List動詞。
wmic /node:MACHINE1, MACHINE4 cpu get name, caption,
maxclockspeed, systemname /format:textvaluelist.xsl
WMIC批命令可以使用變數。也就是說,對於上面的批命令,伺服器的名字不僅可以直接指定,而且還可以通過%1、%2的形式指定,下面就是一個例子。把下面的代碼放入一個批命令檔案,然後在執行批命令檔案時加上一到二個機器的名字即可;另外,也可以創建一個獨立的文本檔案,然後在文本檔案中放入機器名字的清單,清單可以是CSV格式,或用換行符分隔的格式。如果使用獨立的文本檔案提供機器名字,只需在/node全局開關後面加上以@符號為前綴的文本檔案名稱字,@符號告訴/node開關後面的參數是一個檔案名稱字而不是機器名字。
@echo off if "%1"==""
goto msg if "%2"==""
goto single wmic /node:%1, %2 cpu get name, caption, maxclockspeed, systemname
/format:textvaluelist.xsl goto end :single wmic /node:%1 cpu get name, caption, maxclockspeed,
systemname /format:textvaluelist.xsl goto end :msg echo 必須指定至少一台計算機的名字。 :end
如前所述,WMIC命令的輸出結果不僅可以傳送到控制台,還可以傳送到XML或HTML、MOF(Managed Object Format)格式的檔案。在安裝了WMI的計算機上,MOF是WMI資料庫中類和類實例的原始保存形式。下面的例子顯示了如何把MACHINE4處理器信息的查詢結果輸出到HTML檔案,/output全局開關要求WMIC把輸出傳送到file1.htm,/format開關要求WMIC把原始的XML輸出轉換成HTML格式。用來轉換格式的XSL樣式檔案既可以是自定義的,也可以是任何安裝了WMIC的機器上\%systemroot%\system32\WBEM資料夾下面的任意XSL檔案。例如,利用csv.xsl樣式檔案可以把輸出結果轉換成CSV格式,利用htable.xsl樣式可以構造出一個包含結果數據的表格
是在瀏覽器中打開的file1.htm檔案。
wmic /node:MACHINE4 /output:e:\file1.htm cpu get description,
maxclockspeed, extclock, manufacturer,revision /format:hform.xsl
前面已經提到,Class命令加上Get動詞的默認輸出是HTML格式。因此,如果要把這類命令的輸出結果保存到HTML檔案,只需指定/output開關,不必加上/format開關。/record和/append全局開關也能夠從WMIC命令行截取信息,請利用WMIC的命令行幫助功能了解有關這些開關的更多信息。
如果要以XML格式輸出,用/translate開關和Basicxml關鍵字把大於符號“>”和小於符號“<”轉換成XML中有意義的字元。
下面是輸出XML的一個例子,輸出的XML數據可導入到資料庫或其他能夠理解XML標記的系統。下面代碼的輸出中包含了WMIC命令、命令行請求參數、目標節點、全局開關以及命令執行結果。
wmic cpu get maxclockspeed /translate:basicxml /format:rawxml.xsl
總之,WMIC是XP和.NET Server中命令行管理功能的一次重要改進,對於從命令行訪問和管理WMI名稱空間提供了強健的支持。雖然掌握和熟悉WMIC命令行環境需要一段時間,但只要你熟悉了它,一個系統管理的全新境界將展現在你的面前。

相關詞條

熱門詞條

聯絡我們