WMIC 全新的超級命令列管理工具

2021-04-19 08:40:03 字數 4415 閱讀 4311

微軟windows server的圖形介面介面在為網路管理提供便利的同時,因其消耗資源偏大、操作緩慢而頗受windows管理員的微詞,為提供乙個圖形管理介面之外的另一種選擇,微軟推出了集wmi的強大與命令列的簡潔於一身的全新的命令列管理工具wmic。加入了wmic的windows server 2003的命令列,據稱可以完成幾乎所有的管理任務。

以dos起家的微軟,最終靠圖形介面一統了天下。傳統的微軟windows server的圖形介面介面,在使系統管理簡單易行的同時,其偏大的資源消耗與緩慢的操作速度,不但使眾多it pro級系統管理員頗有微詞,也使許多從unix、netware轉過來的系統管理員短時間內難以適從。雖然微軟開發了wmi(windows management instrumentation,windows管理架構),並在support tools和resource kits提供了大量基於wmi的指令碼讓管理員使用,在命令列下管理伺服器,但複雜的指令碼程式設計同樣令許多管理員卻步,因為並非每個管理員都是指令碼程式設計高手。從另乙個角度講,圖形介面介面像乙個黑盒子,使許多管理員喪失了量身定製管理任務的機會與樂趣,只能亦步亦趨地跟在越來越多的嚮導屁股後面,不停地點按著"下一步"。

鑑於上述原因,微軟在windows server 2003中,綜合了wmi的強大與命令列的簡潔,推出了全新的命令列管理工具wmic,英文全稱windows management instrumentation command-line,即windows管理規範命令列。並聲稱使用wmic,再配合其他現存的命令列工具,管理員幾乎可以完成所有的管理任務,而不必再過多地依賴那些圖形介面。

本文將對wmic進行乙個簡單的介紹,由於筆者在撰稿時windows server 2003還沒有正式發布,所以一切技術均以windows server 2003 rc2(build 3718)為準,最終版本正式發布後可能會有變化。

背景:wmi、wbem與cim

關於wmi,我們在以前的文章中多次提及,並有過具體的應用,如《使用vs.net實現wmi呼叫》(2023年1月刊),《限制域使用者同時的多點登入》與《來一段指令碼,kill掉mike的歌》(2023年2月刊)等。這裡不準備再對其做詳細的說明,只做一下簡單的介紹。

wmi是微軟基於web的企業管理(wbem)這一理念與標準的具體實現,並對cim(common information model,公用資訊模型)提供完整的支援。wmi由符合cim標準的物件儲備庫(object repository)和cim物件管理器(wmi object manager)組成,其中物件儲備庫是物件定義的資料庫,物件管理器負責處理儲備庫中物件的收集和操作,並從wmi提供程式(wmi provider)收集資訊。wmi提供程式在wmi與作業系統元件、應用程式和其他系統之間充當中間人角色,兩者通過wmi提供程式交換資訊。wmi提供程式的主要作用就是為wmi提供下層物件的相關資訊,以及允許wmi通過它對下層物件進行管理。例如,登錄檔提供程式從登錄檔中提供資訊,而snmp提供程式則從snmp裝置中提供資料和事件等。

wmi被許多計算機管理工具所用,如microsoft systems management server、microsoft health monitor和microsoft operations manager等。

wmic概述

wmic,是一款新出現在windows server 2003中的命令列管理工具。使用wmic,你不但可以管理本地計算機,而且可以管理同一windows域內的所有遠端計算機(需要必要的許可權),而被管理的遠端計算機不必事先安裝wmic,只需要支援wmi即可。

wmic有乙個能夠分析、解釋和執行從命令列接收的別名(alias)的引擎,它是乙個可執行檔案,名為wmic.exe,這個檔案通常位於"c:/windows/

system32/wbem"資料夾中,該程式執行於使用者當前登入的計算機上。任何對wmic命令列的擴充套件效能都經過別名檔案定義或者註冊。別名又稱友好名稱(friendly names),通過mof(management object format,管理物件格式)格式定義。wmic引擎接收到輸入的命令後,先進行分析。如果命令是乙個別名,wmic會從當前操作命名空間(比如root/cli)呼叫該別名的定義,應用當前的環境設定(如目標命名空間),並將別名命令與它的原始命令進行對應,然後執行。

具體來說,你可以使用wmic實現如下的管理任務:

1、本地計算機管理

2、遠端單個計算機管理

3、遠端多個計算機管理

4、使用遠端會話的計算機管理(如telnet)

5、使用管理指令碼的自動管理

只有本地管理員組成員才能夠啟動wmic,由於wmic本質上是wmi的乙個客戶端,因此wmic的安全受限於wmi的安全。當wmic在乙個遠端會話中被使用時,如telnet、終端服務等,預設情況下,它使用發起此會話的使用者的安全上下文。在使用wmic管理乙個遠端計算機之前,wmic會ping一下遠端計算機以確定其狀態。

在使用wmic命令行時,可以隨時使用"/?"來獲得當前命令上下文的幫助資訊。

執行模式

wmic可以以兩種模式執行:互動模式(interactive mode)和非互動模式(non-interactive mode),經常使用netsh命令列的管理員應該非常熟悉這兩種模式。

互動模式。如果你在命令提示符下或通過"執行"選單只輸入wmic,都將進入wmic的互動模式,每當乙個命令執行完畢後,系統還會返回到wmic提示符下,如"root/cli",互動模式通常在需要執行多個wmic指令時使用。當你需要先執行"context"命令檢視環境變數,再使用"os"命令檢視當前作業系統訊息時,就可以使用互動模式,如圖1所示。互動模式有時還會對一些敏感的操作要求確認,比如刪除操作,最大限度地防止管理員出現失誤。

非互動模式。非互動模式是指將wmic指令直接作為wmic的引數放在wmic後面,當指令執行完畢後再返回到普通的命令提示符下,而不是進入到wmic上下文環境中。wmic的非互動模式主要用於批處理或者其他一些指令碼檔案中,比如上面的"os"命令在非互動模式下就可以使用下面的方式執行:

wmic os /?

使用wmic管理系統

wmic包含了眾多的開關、命令,以及內建的別名,詳細內容見表1、表2和表3。下面讓我們通過具體的例項體驗一下wmic的強大功能。

簡單管理任務

使用wmic,可以完成一些簡單的管理任務,比如檢視硬體與作業系統資訊。如果不使用wmic,查詢硬體如bios、cpu、作業系統等資訊,通常是使用系統提供的api介面進行程式設計,或者編寫一小段指令碼程式,是一件比較麻煩的事情,如表4所示就是乙個查詢bios資訊的傳統vbscript指令碼。如果使用wmic,那情況就大不相同,只需要乙個簡單命令就能搞定:

wmic bios list full

結果如圖2所示。

大家可能注意到了上面命令列中還有兩個引數list和full。list決定顯示的資訊格式與範圍,它有brief、full、instance、status、system、writeable等多個引數,full只是它的乙個引數,也是list的預設引數,表示顯示所有的資訊。其他幾個引數顧名思義,如brief表示只顯示摘要資訊,instance表示只顯示物件例項,status表示顯示物件狀態,writeable表示只顯示該物件的可寫入的屬性資訊等。

wmic process list brief

它會顯示當前所有程序的一些摘要資訊,比如程序名稱、程序id和優先順序等。在我以前的文章《來一段指令碼,kill掉mike的歌》中,就可以使用這一命令代替那個list.vbs指令碼。

複雜管理任務

wmic在完成複雜管理任務方面也是非常出色的,先看一下查詢事件日誌並生成結果檔案的例子:

同樣,你還可以使用wmic同時重新啟動多台被管理的伺服器或工作站,命令如下:

wmic /node:@"c:/myserverlist.txt" osswheres(primary="true") call win32shutdown 6

wmic會首先從"c:/myserverlist.txt"中取得伺服器名稱列表,這些伺服器名稱在檔案中以逗號分割,如"dc1,dc2"。要注意的是,在/node開關後面使用伺服器列表檔案時,一定要在檔名的前面加上"@"引導符。該命令執行結果如圖5所示,在執行重新啟動過程中,wmic會返回詳細的執行結果。

wmic還可以從active directory中取得資料,下面是乙個從active directory中取得使用者資訊的例子,取得的使用者資訊包括顯示名稱、upn名稱、名稱和建立時間等,返回結果如圖6所示:

wmic/namespace:/root/directory/ldap path ds_user get ds_displayname, ds_userprincipalname, ds_cn, ds_name, ds_whencreated /value

總結wmic是我所見到的基於windows平台的功能最強大的命令列工具,但同樣也是最複雜的工具。尤其是在完成複雜的管理任務時,你需要對wmi的win32類的屬性及方法非常熟悉才可能做到游刃有餘。因此,在希望熟悉運用wmic之前,建議先學習wmi,熟悉其win32類的各種屬性及方法。國內現在出過幾本不錯的wmi書籍,你也可以到微軟的msdn**(msdn.microsoft.com)上查詢這方面的資訊。

有了wmic的加入,命令列們應該可以大聲說:"雖然我很醜,但是我很強大"了

kubectl命令列管理工具

命令 描述create 通過檔名或標準輸入建立資源 expose 將乙個資源公開為乙個新的service run在集群中執行乙個特定的映象 set在物件上設定特定的功能 get顯示乙個或多個資源 explain 文件參考資料 edit 使用預設的編輯器編輯乙個資源 delete 通過檔名 標準輸入 ...

robocopy命令列管理

robocopy用法更新 robocopyc d mir log log mot 720 引數解釋 robocopy source destination options mir 將source完全映象到destination log file 將輸出記錄為日誌 覆蓋 log file 將輸出記錄為...

Git命令列管理

git命令列管理 習慣命令列的可以使用,不習慣的可以使用 sourcetree 管理更加方便 視覺化。但mac 是比較坑的地方是不知道把 sourcetree 以前登陸的賬號退出重新登陸 git 全域性設定 git config global user.name git config global ...