Uruchamianie skryptu na podstawie zdarzenia
Standardowy użytkownik implementowany przez klasęActiveScriptEventConsumer umożliwia komputerowi uruchamianie skryptu i podejmowanie akcji w przypadku wystąpienia ważnych zdarzeń w celu zapewnienia automatycznego wykrywania i rozwiązywania problemów przez komputer.
Ten konsument jest domyślnie ładowany w przestrzeni nazw root\subscription.
Wydajność wszystkich wystąpień ActiveScriptEventConsumer w systemie można skonfigurować, ustawiając wartości limitu czasu lub MaximumScripts właściwości w jednym wystąpieniu ScriptingStandardConsumerSetting.
Podstawowa procedura korzystania ze standardowych odbiorców jest zawsze taka sama i znajduje się w Monitorowanie i Reagowanie na Zdarzenia za Pomocą Standardowych Odbiorców. Poniższa procedura, która dodaje do procedury podstawowej, jest specyficzna dla klasy ActiveScriptEventConsumer i opisuje sposób tworzenia odbiorcy zdarzeń, który uruchamia skrypt.
Ostrożność
KlasaActiveScriptEventConsumer ma specjalne ograniczenia zabezpieczeń. Ten standardowy użytkownik musi być skonfigurowany przez lokalnego członka grupy Administratorzy na komputerze lokalnym. Jeśli używasz konta domeny do utworzenia subskrypcji, konto LocalSystem musi mieć niezbędne uprawnienia do domeny, aby sprawdzić, czy twórca jest członkiem lokalnej grupy Administratorzy.
Poniższa procedura opisuje sposób tworzenia odbiorcy zdarzeń, który wykonuje skrypt.
Aby utworzyć konsumenta zdarzeń, który wykonuje skrypt
Napisz skrypt do uruchomienia po wystąpieniu zdarzenia.
Skrypt można napisać w dowolnym języku, ale upewnij się, że na komputerze jest zainstalowany aparat skryptów dla wybranego języka. Skrypt nie musi używać obiektów skryptów usługi WMI.
Tylko administrator może skonfigurować użytkownika skryptu, a skrypt jest uruchamiany w obszarze Poświadczenia systemu lokalnego, co zapewnia szerokie możliwości użytkownikowi z wyjątkiem dostępu do sieci. Jednak skrypt nie ma dostępu do określonych danych logowania użytkownika, na przykład zmiennych środowiskowych i udziałów sieciowych.
W pliku Managed Object Format (MOF) utwórz wystąpienie ActiveScriptEventConsumer w celu odbierania żądanych zdarzeń w zapytaniu.
Możesz umieścić tekst skryptu w ScriptTextlub określić ścieżkę i nazwę pliku skryptu w ScriptFileName. Aby uzyskać więcej informacji, zobacz Projektowanie klas formatu obiektów zarządzanych (MOF).
Utwórz wystąpienie __EventFilter, nadaj mu nazwę, a następnie utwórz zapytanie w celu określenia typu zdarzenia, które wyzwala wykonywanie skryptu.
Aby uzyskać więcej informacji, zobacz Querying with WQL.
Utwórz wystąpienie __FilterToConsumerBinding, aby skojarzyć filtr z wystąpieniem ActiveScriptEventConsumer.
Skompiluj plik MOF przy użyciu Mofcomp.exe.
W przykładach w poniższej sekcji przedstawiono dwa sposoby implementowania skryptu opartego na zdarzeniach. W pierwszym przykładzie użyto skryptu zdefiniowanego w pliku zewnętrznym, a drugi przykład używa skryptu wbudowanego w kod MOF. Przykłady znajdują się w kodzie MOF, ale wystąpienia można utworzyć programowo przy użyciu interfejsu API skryptów dla usługi WMI lub interfejsu API com dla usługi WMI.
Przykład użycia skryptu zewnętrznego
Poniższa procedura opisuje sposób użycia przykładu skryptu zewnętrznego.
Aby użyć przykładowego skryptu zewnętrznego
Utwórz plik o nazwie c:\Asec.vbs, a następnie skopiuj do niego skrypt w tym przykładzie.
Skopiuj listę MOF do pliku tekstowego i zapisz ją przy użyciu rozszerzenia mof.
W oknie wiersza polecenia skompiluj plik MOF przy użyciu następującego polecenia.
mofcompnazwa pliku**.mof**
Uruchom Kalkulator, który tworzy proces calc.exe. Poczekaj ponad pięć sekund, zamknij okno Kalkulator, a następnie poszukaj w katalogu C:\ pliku o nazwie ASEC.log.
Poniższy tekst jest podobny do tekstu, który będzie zawarty w pliku ASEC.log.
Time: 12/31/2002 2:56:33 PM; Entry made by: ASEC Application closed. UserModeTime: 1562500; KernelModeTime: 3125000 [hundreds of nanoseconds]
Poniższy przykład kodu VBScript przedstawia skrypt wywoływany po odebraniu zdarzenia przez użytkownika trwałego. Obiekt TargetEvent jest wystąpieniem __InstanceDeletionEvent, dlatego ma właściwość o nazwie TargetInstance, która jest wystąpieniem Win32_Process używanym do wyzwalania zdarzenia. Klasa Win32_Process ma właściwości UserModeTime i KernelModeTime, które są umieszczane w pliku dziennika utworzonym przez skrypt.
' 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
Poniższy przykład kodu MOF wywołuje skrypt po odebraniu zdarzenia. Tworzy filtr, odbiorcę i powiązanie między nimi w przestrzeni nazw 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;
};
Przykład użycia skryptu wbudowanego
Poniższa procedura opisuje sposób użycia przykładowego skryptu wbudowanego.
Aby użyć przykładowego skryptu wbudowanego
Skopiuj listę MOF w tej sekcji do pliku tekstowego i zapisz ją przy użyciu rozszerzenia mof.
W oknie wiersza polecenia skompiluj plik MOF przy użyciu następującego polecenia.
mofcomp nazwa pliku**.mof**
Poniższy przykładowy kod MOF tworzy filtr, odbiorcę i powiązanie między nimi, a także zawiera wbudowany skrypt.
#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;
};
Tematy pokrewne