根據事件執行腳本
ActiveScriptEventConsumer 類別所實作的標準取用者可讓電腦執行腳本,並在發生重要事件時採取動作,以確保計算機可以自動偵測並解決問題。
此取用者預設會在 root\subscription 命名空間中載入。
您可以在單一 ScriptingStandardConsumerSetting 的單一實例中設定 Timeout 或 MaximumScripts 屬性值,以設定系統上所有 ActiveScriptEventConsumer 實例的效能。
使用標準取用者的基本程式一律相同,且位於使用標準取用者的監視和回應事件中。 下列新增至基本程序的程式是 ActiveScriptEventConsumer 類別特有的程式,並說明如何建立執行腳本的事件取用者。
警告
ActiveScriptEventConsumer 類別具有特殊的安全性條件約束。 此標準取用者必須由本機計算機上的 Administrators 群組本機成員設定。 如果您使用網域帳戶來建立訂用帳戶,則 LocalSystem 帳戶必須具有網域的必要許可權,才能確認建立者是本機 Administrators 群組的成員。
下列程式描述如何建立執行腳本的事件取用者。
建立執行腳本的事件取用者
撰寫文本,以在事件發生時執行。
您可以使用任何語言撰寫文本,但請確定您所選擇的語言的腳本引擎已安裝在您的電腦上。 腳本不需要使用 WMI 腳本物件。
只有系統管理員可以設定腳本取用者,而且腳本會在LocalSystem認證下執行,除了網路存取之外,它可提供廣泛的功能給取用者。 不過,腳本無法存取特定的使用者登入數據,例如環境變數和網路共用。
在 Managed 物件格式 (MOF) 檔案中,建立 ActiveScriptEventConsumer 的實例,以接收您在查詢中要求的事件。
您可以將腳本的文字放在 ScriptText 中,或在 ScriptFileName 中指定腳本的路徑和檔名。 如需詳細資訊,請參閱 設計 Managed 物件格式 (MOF) 類別。
建立__EventFilter實例、為其命名,然後建立查詢以指定事件類型,以觸發執行腳本。
如需詳細資訊, 請參閱使用 WQL 進行查詢。
建立 __FilterToConsumerBinding 實例,將篩選條件與 ActiveScriptEventConsumer 實例產生關聯。
使用 Mofcomp.exe 編譯MOF檔案。
下一節中的範例示範實作事件驅動腳本的兩種方式。 第一個範例會使用外部檔案中定義的腳本,而第二個範例會使用MOF程式碼內建的腳本。 這些範例位於MOF程式碼中,但您可以使用適用於WMI的腳本 API 或適用於WMI的 COM API,以程式設計方式建立實例。
使用外部腳本的範例
下列程式描述如何使用外部文本範例。
若要使用外部腳本範例
建立名為 c:\Asec.vbs 的檔案,然後將此範例中的腳本複製到其中。
將MOF清單複製到文字檔,並以 .mof 擴展名儲存。
在命令提示字元視窗中,使用下列命令編譯MOF檔案。
Mofcomp filename**.mof**
執行計算機,以建立calc.exe程式。 等候五秒以上,關閉 [計算機] 視窗,然後查看 C:\ 目錄,尋找名為 ASEC.log 的檔案。
下列文字類似於將包含在ASEC.log檔案中的文字。
Time: 12/31/2002 2:56:33 PM; Entry made by: ASEC Application closed. UserModeTime: 1562500; KernelModeTime: 3125000 [hundreds of nanoseconds]
下列 VBScript 程式代碼範例顯示永久取用者收到事件時所呼叫的腳本。 TargetEvent 對像是__InstanceDeletionEvent實例,因此其具有名為 TargetInstance 的屬性,這是用來引發事件的Win32_Process實例。 Win32_Process 類別具有 UserModeTime 和 KernelModeTime 屬性,這些屬性會放入腳本所建立的記錄檔中。
' asec.vbs script
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.OpenTextFile("C:\ASEC.log", 8, true)
objFile.WriteLine "Time: " & Now & "; Entry made by: ASEC"
objFile.WriteLine "Application closed. UserModeTime: " & _
TargetEvent.TargetInstance.UserModeTime & _
"; KernelModeTime: " & _
TargetEvent.TargetInstance.KernelModeTime & _
" [hundreds of nanoseconds]"
objFile.Close
收到事件時,下列MOF程式碼範例會呼叫腳本。 它會在 root\subscription 命名空間中建立篩選、取用者和系結。
#pragma namespace ("\\\\.\\root\\subscription")
instance of ActiveScriptEventConsumer as $Cons
{
Name = "ASEC";
ScriptingEngine = "VBScript";
ScriptFileName = "c:\\asec2.vbs";
};
instance of __EventFilter as $Filt
{
Name = "EF";
Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
"WHERE TargetInstance ISA \"Win32_Process\" "
"AND TargetInstance.Name = \"calc.exe\"";
QueryLanguage = "WQL";
EventNamespace = "root\\cimv2";
};
instance of __FilterToConsumerBinding
{
Filter = $Filt;
Consumer = $Cons;
};
使用內嵌腳本的範例
下列程式描述如何使用內嵌腳本範例。
使用內嵌腳本範例
將本節中的MOF清單複製到文字檔中,並以 .mof 擴展名儲存。
在命令提示字元視窗中,使用下列命令編譯MOF檔案。
Mofcomp filename**.mof**
下列MOF程式碼範例會建立篩選、取用者,以及它們之間的系結,而且也包含內嵌腳本。
#pragma namespace ("\\\\.\\root\\subscription")
instance of ActiveScriptEventConsumer as $Cons
{
Name = "ASEC";
ScriptingEngine = "VBScript";
ScriptText =
"Dim objFS, objFile\n"
"Set objFS = CreateObject(\"Scripting.FileSystemObject\")\n"
"Set objFile = objFS.OpenTextFile(\"C:\\ASEC.log\","
" 8, true)\nobjFile.WriteLine \"Time: \" & Now & \";"
" Entry made by: ASEC\"\nobjFile.WriteLine"
" \"Application closed. UserModeTime: \" & "
"TargetEvent.TargetInstance.UserModeTime &_\n"
"\"; KernelModeTime: \" & "
"TargetEvent.TargetInstance.KernelModeTime "
"& \" [hundreds of nanoseconds]\"\n"
"objFile.Close\n";
};
instance of __EventFilter as $Filt
{
Name = "EF";
Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
"WHERE TargetInstance ISA \"Win32_Process\" "
"AND TargetInstance.Name = \"calc.exe\"";
QueryLanguage = "WQL";
EventNamespace = "root\\cimv2";
};
instance of __FilterToConsumerBinding
{
Filter = $Filt;
Consumer = $Cons;
};
相關主題