vbs中對於getobject使用WMI的使用說明

2021-09-07 21:53:23 字數 3795 閱讀 2118

wmi一

什麼是wmi

wmi是windows 2k/xp管理系統的核心;對於其他的win32作業系統,wmi是乙個有用的外掛程式。有了wmi,工具軟體和指令碼程式訪問作業系統的不同部分時不需要使用不同的api;相反,作業系統的不同部分都可以插入wmi

也就是說,利用wmi我們能更方便地管理 windows 資源 — 例如磁碟、事件日誌、檔案、資料夾、檔案系統、網路元件、作業系統設定、效能資料、印表機、程序、登錄檔設定、安全性、服務、共享、使用者、組等等。。

二、對wmi中一些名詞的解釋

首先看到下面的乙個例子,這段**能夠輸出物理記憶體的大小(不是用已有的函式):

$strcomputer = "."

$wbemservices = objget("winmgmts:\\" & $strcomputer & "\root\cimv2")

$wbemobjectset= $wbemservices.instancesof("win32_logicalmemoryconfiguration")

for $wbemobject in $wbemobjectset consolewrite("total physical memory (kb): " & $wbemobject.totalphysicalmemory) next

物件:所謂物件,就是建立com元件時的返回值,像$wbemservices就是,我們稱之為swbemserviceswmi服務物件,至於$wbemobjectset則叫做swbemobject類例項集合物件,後文我還會提到swbemlocator教本庫物件。它們的層級關係如下:swbemlocator教本庫物件→swbemserviceswmi服務物件→swbemobject類例項集合物件→swbemobject類的例項。

屬性:以$wbemservices.instancesoff為例,我們就說$wbemservices物件的instancesoff屬性。

類:wmi能實現的操作有很多種,不同種類的操作都是分開的,我們稱之為類,上面**中的"win32_logicalmemoryconfiguration"就是乙個類。

命名空間:類也分很多種,功能相近的類分在一起就是命名空間,比如說上面**中的\root\cimv2。而另乙個常用的命名空間是root\default。例如,事件日誌、效能計數器、windows 安裝程式和 win32 提供程式都儲存在 root\cimv2 命名空間中。另一方面,登錄檔提供程式儲存在 root\default 命名空間中。

集合:$wbemobjectset的資料型別屬於集合,用for...in...能對其進行列舉。

三、使用wmi的基本步驟

1.獲取swbemserviceswmi服務物件,或者說連線到目標計算機的命名空間

$strcomputer = "."

$wbemservices = objget("winmgmts:\\" & $strcomputer & "\root\cimv2")

2.獲取類的集合物件

$wbemobjectset= $wbemservices.instancesof("win32_logicalmemoryconfiguration")

3.使用指定物件的屬性進行操作

for $wbemobject in $wbemobjectset consolewrite("total physical memory (kb): " & $wbemobject.totalphysicalmemory) next

上面三步僅僅是對wmi操作的概括,實際操作時每一步都很複雜,下面將對這3步逐一進行講解。

四、連線到命名空間的方法

方法1.用moniker名字法建立wmi服務的連線

這一方法也就是本文的例子所用到的,它的要點就是通過編寫乙個moniker字串作為objget函式的引數,然後返回乙個swbemservices物件。

關於moniker字串的完整格式如下:

"winmgmts:[!][\\computername][\namespace][:classname][.keyproperty='value']"

"winmgmts:"是字首, 表示為wmi服務,必須使用;第二部分用來驗證許可權和假冒級別的,省略。第三部分為計算機名字:"\\.\"是本機的計算機名字,預設可省略,,其餘同上;第四部分命名空間:預設的命名空間為"root\cimv2",預設可省略。也就是說我給的那個例子中的相關**可簡寫為:$wbemservices = objget("winmgmts:"),但我絕不建議這樣做。

第五部分為類名。第六部分為屬性值。注意:當該moniker字串不包括最後2項時(即為:"winmgmts:[\\computername][\namespace]"),則objget(moniker字串)返回的是乙個命名空間的已驗證的連線(swbemservices物件);當不包括最後1項時,返回的是乙個類(swbemobject物件);當包括最後2項時,返回的是乙個類的單獨例項(swbemobject物件)。

方法2.通過建立swbemlocator物件

1.建立swbemlocator物件

$objlocator = objcreate("wbemscripting.swbemlocator")

2.通過connectserver屬性登入到目標計算機,下面的**是登入到本機

$objservice = $objlocator.connectserver(".", "root\cimv2")

3.設定impersonation等級

$objservice.security_.impersonationlevel = 3

5.執行你的**,還是以顯示物理記憶體為例

$objlocator = objcreate("wbemscripting.swbemlocator") $objservice = $objlocator.connectserver(".", "root\cimv2")$objservice.security_.impersonationlevel = 3

;和第乙個例子不同,這裡使用了execquery屬性來獲取win32_logicalmemoryconfiguration類的物件 $wbemobjectset =$objservice.execquery("select * from win32_logicalmemoryconfiguration")

for $wbemobject in $wbemobjectset consolewrite("total physical memory (kb): " & $wbemobject.totalphysicalmemory) next

vbs中對於getobject使用WMI的使用說明

wmi一 什麼是wmi wmi是windows 2k xp管理系統的核心 對於其他的win32作業系統,wmi是乙個有用的外掛程式。有了wmi,工具軟體和指令碼程式訪問作業系統的不同部分時不需要使用不同的api 相反,作業系統的不同部分都可以插入wmi。也就是說,利用wmi我們能更方便地管理 win...

vbs中class的使用示例

從網上看到乙個vbs中使用class的例子,轉出來,共同學習!class arraylist private items private size private sub class initialize size 0 redim items 1 end sub private sub class ...

caffe中對於softmax layer的說明

softmax 的步驟 softmax回歸 網上有很多關於softmax回歸的帖子,我的理解是softmax本質的作用就是計算softmax layer的輸入在每乙個標籤上的概率,caffe中softmax layer的過程如下 1 找出輸入的最大值 2 輸入的每乙個變數都減去最大值 3 對 2 中...