初窺WMI_Vbs腳本編程簡明教程補充讀物
更新時間:2008年06月19日 12:23:11 作者:
看了沼澤介紹的wmi腳本相關(guān)知識,對新手是個不錯的教材,如果想和系統(tǒng)結(jié)合的更好,想實現(xiàn)更大功能的代碼,那么學習vbs就不得不用wmi腳本
1.任務四:利用腳本實時監(jiān)視對方進程
在任務一和任務三中我們都是在查看對方的進程,出來的結(jié)果對我們意義不是很大,在這個任務中我們要從現(xiàn)在開始每當他開一個任務我們就察覺到,并把它記錄下來。我們要在他開進程的那一秒開始報告并記錄,我們要清楚他所開的程序所在的位置,我們要比他更清楚地知道這些信息。
現(xiàn)在我們就按照前面提到的三個步驟來實現(xiàn)任務。
首先,我們連接到對方的WMI。在這里我們首先調(diào)用 VBScript 的中的Createobject()來得到一個對象,然后利用這個特殊的對象的方法來連接到遠程的計算機上。這個特殊的對象就是wbemscripting.swbemlocator。
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
注意其中的strComputer就是你所要連接的計算機的名稱或者IP地址,strUser,strPwd當然就是用戶名和密碼了,我們說過這個用戶必須是具有管理員權(quán)限的才可以。root\cimv2是WMI的命名空間,關(guān)于WMI的命名空間,大家可以到“計算機管理\WMI控件”中看到,這里面的學問就大了,得慢慢琢磨,為了我們的任務快速實現(xiàn),我就不多解釋了。用這種方法連接到WMI,返回一個對SWbemServices對象的引用,一旦有一個對 SWbemServices對象的引用。我們就可以進行第二個步驟了。
在第二個步驟中,我們將得到WMI 托管資源的實例,我們利用WbemServices中的一個方法ExecNotificationQuery可以查詢我們所要的類,進而可以得到該類中實例。
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa 'Win32_Process'")
注意這里有個類似于SQL語言的查詢語言,這里叫做WQL語言,懂SQL的一看就明白了,不懂的就在網(wǎng)上找找它的資料,滿天都是。得到的colMonitoredProcesses是所查詢的類的實例的集合。有了這些我們的第三個步驟就可以開始了。
在第三個步驟中,我們將顯示出得到的實例中的屬性。剛才我們得到的是實例的集合,在這里我們通過colMonitoredProcesses.NextEvent來獲取每一個具體的實例,得到每一個具體的實例后,我們就可以顯示出他們的屬性,也就是我們想看的東西了。這里我們顯示了CommandLine的屬性值。
到現(xiàn)在你是否有些迷惑了,因為你還不知道到底WMI里面有那些類,具體類又有哪些屬性,呵呵,沒有關(guān)系的,用一些工具可以很輕松的得到這些信息。比如系統(tǒng)自帶的wbemtest,在運行中敲入這個程序名,你就可以看到這些了,它也遵循連接、查詢、枚舉這三個步驟。自己慢慢玩吧,很快你就會發(fā)現(xiàn)WMI太大了,單是命名空間就有10多個,然后單是我們常用的空間root\CIMV2里面就有近1000個類,每個類里面又有好多的屬性,有些類還有好多方法。哈哈,頭暈了吧?沒關(guān)系,其實你只需要知道其中的一些就好了。
看到這些估計你的頭已經(jīng)很大了,但是恭喜你,我們的這個任務已經(jīng)完成了,是的,就是這么簡單,下面我將完整代碼奉獻出來。
Set colArgs = WScript.Arguments
If WScript.arguments.count < 3 then
WScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strFile = wscript.arguments(3)
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa 'Win32_Process'")
i = 0
Do While i = 0
Set objLatestProcess = colMonitoredProcesses.NextEvent
Wscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLine
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objNewFile = objFS.OpenTextFile(strFile,8,true)
objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLine
objNewFile.Close
Loop
到這個程序的核心了吧?相信你已經(jīng)懂了其中的很多,剩余的部分代碼我稍后解釋。我們先來感性認識一下,先看它該怎么用吧!把上面的代碼拷貝到記事本中,然后保存為monitor.vbs的文件,然后在命令提示符下輸入:
CSCRIPT monitor.vbs
回車,你就會看到幫助,下面舉例說明這個腳本的具體用法:
CSCRIPT monitor.vbs 192.168.1.2 user password C:\1.txt
在命令提示符下敲入上面的命令就OK了,每當對方開一個程序的時候,你就可以看到時間,程序路徑和程序名。如果你沒有時間去看這些信息,你還可以等有時間的時候到C:\1.txt看到這些信息。
小知識:
每次使用腳本,都必須敲入CSCRIPT和腳本的后綴名,很麻煩。這是因為系統(tǒng)默認的執(zhí)行引擎是WSCRIPT,可以將它改成CSCRIPT。另外一個讓人不爽的是腳本執(zhí)行后總要顯示微軟的說明,好像腳本不是我們寫的一樣。不過你可以通過在命令提示符下敲入下面的命令來解決這個問題:
cscript //nologo //h:cscript //s
這樣你以后再運行這些腳本的時候就不用在敲入CSCRIPT了,也不用在寫入.vbs的后綴名了,就上面的例子來說,你可以這樣用:
monitor 192.168.1.2 user password C:\1.txt
解釋:
1)前面的那幾行,大概就是為了顯示幫助和處理我們在后面輸入的參數(shù)。應用到了WScript.Arguments這個對象,利用它我們可以來獲取并處理腳本的參數(shù)。
2)那個死循環(huán)是為了讓我們一直監(jiān)視他(她),每當他開一個程序,我們就得到一個新的實例,我們就可以知道他更多的信息,哈哈,夠狠吧。這樣你也就知道了,當我們這個腳本運行后,只有通過我們?nèi)藶橹兄共拍苤袛啾O(jiān)視,人為中止的方法大家可以用CTRL+C來完成,也可以用各種野蠻的方法來中止。
3)在代碼中出現(xiàn)的另外一個核心對象就是FileSystemObject,應該是大家的老朋友了吧,我這里就不再做解釋了,我們在這里應用它主要是為了將結(jié)果同時保存到一個文件中,我們利用它來創(chuàng)建或打開一個文件,將信息追加進去。
4)至于那個NOW,雖然體積很小,但是卻正是它給我們提供了時間這個重要的信息。
5)如果你想要監(jiān)視的是自己的計算機而不是遠程的計算機(據(jù)我所知,這個應用還是很廣的)。那么請將計算機名的參數(shù)寫為一個小點,用戶名和密碼留為空。如下所示:
monitor . "" "" C:\1.txt
2.任務五:利用腳本給對方開放共享
有了任務四的基礎(chǔ),這次我們就先看代碼吧:
Set colArgs = WScript.Arguments
If WScript.arguments.count < 5 then
WScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strPath = wscript.arguments(3)
strShareName = wscript.arguments(4)
intMaximumAllowed = 1
strDescription = "Temporary share"
Const SHARED_FOLDER = 0
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set objSWbemObject = wbemServices.Get("Win32_Share")
intReturnValue = objSWbemObject.Create(strPath, _
strShareName, _
SHARED_FOLDER, _
intMaximumAllowed, _
strDescription)
if(intReturnValue = 0) Then
WScript.Echo "The share have been created successfully"
End If
解說:
1)我們可以看出來前面的那幾行是為顯示幫助和處理輸入?yún)?shù)而存在的。
2)緊接著設(shè)置了幾個變量,為以后做參數(shù)用的。這里我們可以先不理會它。
3)連接到主機的WMI,然后就是查詢。前面已經(jīng)說的很詳細了。
4)這次得到實例集后,我們用了它的一個方法,也就是這個方法讓共享成為了可能,聯(lián)系到第二部分的內(nèi)容,我們不難知道第一個參數(shù)表示要共享的路徑和文件名,第二個參數(shù)表示共享名,第三個參數(shù)為0就可以了,第四個參數(shù)是指可以連接的人數(shù),第五個參數(shù)是共享描述了,而我們只關(guān)心前面的兩個參數(shù)。如果手頭有MSDN那就好辦了,到MSDN中可以查到該方法的更詳細的內(nèi)容。
5)這次我們根據(jù)第四步的返回值來得到共享是否成功,并給出提示。不同的返回值代表不同的意義。這個信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表拒絕訪問,9代表用戶名錯誤,25代表主機名沒有找到等等。
6)這次我們要注意的是,用這個腳本來實現(xiàn)遠程文件共享,要求遠程存在這個文件,否則無法共享。當然你也可以利用教本創(chuàng)建自己的文件夾,很容易的,自己創(chuàng)建吧。
7)如上腳本創(chuàng)建后的共享是完全共享。就是可以刪除修改文件的。
8)用法舉例:share netp net swswsw C:\dodo marsh
好了,到現(xiàn)在為止,大家應該對這位朋友有些了解了,我的介紹任務也就告一段落了,如果大家想進一步認識它,那就主要靠大家的主動性了。這次我們主要通過WMIC和腳本來認識它,下次我將帶領(lǐng)大家通過真正的程序代碼來認識它,讓它也有個象Windows一樣漂亮的臉蛋。今天我所提到的估計只能算是WMI的萬分之一,都算不上是冰山一角。剩余的要靠自己來發(fā)揮了。如果你肯利用你的所學,那么奇跡就會產(chǎn)生。
您可能感興趣的文章:
- VB中使用WMI獲取系統(tǒng)硬件和軟件有關(guān)信息
- VBS調(diào)用WMI遍歷搜索硬盤文件并計數(shù)的方法
- vbs通過WMI修改文件文件夾的NTFS權(quán)限
- WMI StdRegProv 通過wmi操作注冊表的vbscript實現(xiàn)代碼 (本地或遠程)
- VBS通過WMI監(jiān)視注冊表變動的代碼
- VBS通過WMI獲取CPU使用率的代碼
- 將WMI中的DateTime類型轉(zhuǎn)換成VBS時間的函數(shù)代碼
- VBS調(diào)用WMI實現(xiàn)搜索硬盤mp3文件
- Rcmd.vbs [Remote Cmd with wmi]遠程腳本
- VBS調(diào)用WMI快速關(guān)閉IE的腳本
- VBS腳本使用WMI操作注冊表的代碼
- vbs wmi獲取電腦硬件信息實例
- 使用WMI得到計算機的信息
相關(guān)文章
SQL獲取表結(jié)構(gòu)的show_table.vbs (冰點極限NP)
SQL獲取表結(jié)構(gòu)的show_table.vbs,用vbs實現(xiàn)查看sql數(shù)據(jù)庫的表結(jié)構(gòu)的代碼。需要傳入用戶名密碼與數(shù)據(jù)庫名稱,具體的看程序幫助。2010-11-11用vbs計算某個詞在日志文件中的出現(xiàn)次數(shù)
用vbs計算某個詞在日志文件中的出現(xiàn)次數(shù)...2007-03-03