python中wmi介紹和使用

原文地址:python中wmi介紹和使用作者:拔草

python中wmi介紹和使用




一:WMI基礎知識
====================================================================================
WMI 最初於1998年作爲一個附加組件與 Windows NT 4.0 Service Pack 4 一起發行,是內置在Windows 2000、 Windows XP和Windows Server 2003 系列操作系統中核心的管理支持技術。基於由 Distributed Management Task Force (DMTF) 所監督的業界標準,WMI是一種規範和基礎結構,通過它可以訪問、配置、管理和監視幾乎所有的Windows資源。大多用戶習慣於使用衆多的圖形化管理工 具來管理Windows資源,在WMI之前這些工具都是通過 Win32應用程序編程接口(Application ProgrammingInterfaces,API)來訪問和管理Windows資源的。只要你熟悉系統編程你就知道API有多麼重要。但是大多數腳本 語言都不能直接調用Win32 API,WMI的出現使得系統管理員可以通過一種簡便的方法即利用常見的腳本語言實現常用的系統管理任務。
利用WMI需要和腳本如WSH和VBScript結合起來,可以實現的功能大家可以看微軟的MSDN文檔。
在編寫我們自己的腳本之前,我們需要對WMI的體系結構有個基本的瞭解。如圖一:(1.gif)
在WMI 體系結構中我們最需要關心的就是WMI提供程序,WMI提供程序在WMI和託管資源之間扮演着中間方的角色。提供程序代表使用者應用程序和腳本從WMI託 管資源請求信息,併發送指令到WMI託管資源。下面是我們利用WMI編程經常要用到的WMI內置提供程序清單,以供編程參考。
1.Active Directory提供程序
鏈接庫文件:dsprov.dll
命名空間:rootdirectoryldap
作用:將Active Directory 對象映射到 WMI。

2.事件日誌提供程序
鏈接庫文件:ntevt.dll
命名空間:rootcimv2
作用:管理 Windows 事件日誌,例如,讀取、備份、清除、複製、刪除、監視、重命名、壓縮、解壓縮和更改事件日誌設置。

3.註冊表提供程序
鏈接庫文件:stdprov.dll
命名空間:rootdefault
作用:讀取、寫入、枚舉、監視、創建、刪除註冊表項和值。

4.Win32 提供程序
鏈接庫文件:cimwin32.dll
命名空間:rootcimv2
作用:提供關於計算機、磁盤、外圍設備、文件、文件夾、文件系統、網絡組件、操作系統、打印機、進程、安全性、服務、共享、SAM 用戶及組,以及更多資源的信息。

5.Windows 安裝程序提供程序
鏈接庫文件:msiprov.dll
命名空間:rootcimv2
作用:提供對已安裝軟件信息的訪問。

從 上面可以看出在WMI中類(即內置提供程序)被分組到命名空間中,命名空間可以看成是一個組。比如,命名空間 rootcimv2 包括大部分表示通常與計算機和操作系統相關聯的資源的類。在使用類的時候要說明類所在的命名空間。類由屬性和方法構成。這是可視化編程中的兩個重要的概 念。屬性描述的是對象的狀態,方法是對象可以執行的操作。
(轉載)

接着看python 中的WMI使用

是Tim Golden's 的WMI.PY,使用起來非常簡單.下面的例子是摘自它自身提供的example

import wmi

c = wmi.WMI ()
for s in c.Win32_Service ():
if s.State == 'Stopped':
  print s.Caption, s.State
打印WIN的服務名稱和狀態.其中服務是在停止狀態下才打印.

List all running processes

import wmi
c = wmi.WMI ()
for process in c.Win32_Process ():
print process.ProcessId, process.Name
簡單吧,幾天語句就把進程列出來了,提權什麼都不用,比用delphi方便多了,嘿嘿,不過就是速度慢了點。

Reboot a remote machine

import wmi
c = wmi.WMI (computer="other_machine", privileges=["RemoteShutdown"])
os = c.Win32_OperatingSystem (Primary=1)[0]
os.Reboot ()


Show the IP and MAC addresses for IP-enabled network interfaces

import wmi
c = wmi.WMI ()
for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
print interface.Description, interface.MACAddress
for ip_address in interface.IPAddress:
  print ip_address
print


List registry keys

import _winreg
import wmi
r = wmi.Registry ()
result, names = r.EnumKey (hDefKey=_winreg.HKEY_LOCAL_MACHINE, sSubKeyName="Software")
for key in names:
print key
操作註冊表.

越用越爽啊,簡單易用,真不愧是pythonic啊。當然還有很多其他的example,自己看咯.

wmi python
http://tgolden.sc.sabren.com/python/wmi.html
wim cookbook
http://tgolden.sc.sabren.com/python/wmi_cookbook.html
發佈了4 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章