必威电竞|足球世界杯竞猜平台

wmic
來源:互聯網

WMIC擴展WMI(Windows Management Instrumentation,Windows管理工具),提供了從命令行接口和批命令腳本執行系統管理的支持。

概念

在WMIC出現之前,如果要管理WMI系統,必須使用一些專門的WMI應用,例如SMS,或者使用WMI的腳本編程API,或者使用象CIM Studio之類的工具。如果不熟悉C++之類的編程語言VBScript之類的腳本語言,或者不掌握WMI名稱空間的基本知識,要用WMI管理系統是很困難的。WMIC改變了這種情況。

WMIC比WMI簡單、直觀得多,這主要是由于使用了別名。別名機制獲取用戶在命令行上輸入的一些簡單命令,按照預定義的方式操作WMI名稱空間,例如根據一個簡單的WMIC別名Get命令構造出一個復雜的WMI查詢語言(WQL)命令。從這個意義上看,別名是用戶和名稱空間之間一個簡化操作的中間層。例如,如果在WMIC命令行上執行下面這個簡單的WMIC命令,就可以獲得用戶帳戶的基本信息:

useraccount list brief

在上面的命令中,Useraccount別名執行了一個win32_Useraccount類的WQL查詢,以文本的形式顯示出從該類提取的信息。另外,WMIC還以文本的形式顯示出Win32_Useraccount類的屬姓。除了文本形式的輸出之外,WMIC還能夠以其他形式返回命令執行結果,例如XMLHTML或者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命令行環境。這個命令可以在XP或.NETServer的標準命令行解釋器(cmd.exe)、Telnet會話或“運行”對話框中執行。這些啟動方法可以在本地使用,也可以通過.NET Server終端服務會話使用。

第一次執行WMIC命令時,Windows首先要安裝WMIC,然后顯示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式執行。例如,執行下面的命令將關閉正在運行的Outlook

process where name='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會話的配置選項。例如,/trace:on開關啟用錯誤跟蹤機制,如果這個開關處于打開狀態,WMIC返回每一個命令的錯誤信息。利用/node開關可以訪問遠程機器,/interactive:on開關要求WMIC在執行刪除操作之前提示確認,其他的全局開關還包括/role、/user、/implevel以及/namespace。

如前所述,別名是用戶和WMI名稱空間一個簡化語法的中間層。當你指定一個別名時,動詞(動詞)表示要執行的動作。例如,前面例子中的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 /? 顯示某個命令的信息

/? memcached /? 顯示某個別名的信息

/? 溫度 get /? 顯示別名與動詞組合的信息

/?:Full irq get /?:Full 顯示動詞的幫助信息

實踐應用

以上我們了解了WMIC命令行環境的基礎知識,下面來看看如何用批命令運行WMIC,以及把輸出結果定向到控制臺或HTMLXML文件。從批命令文件運行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,

goto end

谷氨酸鈉

echo 必須指定至少一臺計算機的名字。

:end

如前所述,WMIC命令的輸出結果不僅可以發送到控制臺,還可以發送到XMLHTML、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.HTML文件。

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:rawXMLxsl

總之,WMIC是XP和.NET Server中命令行管理功能的一次重要改進,對于從命令行訪問和管理WMI名稱空間提供了強勁的支持。雖然掌握和熟悉WMIC命令行環境需要一段時間,但只要你熟悉了它,一個系統管理的全新境界將展現在你的面前。

參考資料 >

生活家百科家居網