Tag

WQL

PowerShell, Windows

Zdarzenia WMI i Windows PowerShell

W WMI istnieje takie zagadnienie jak kwerendy zdarzeń WMI. Istnieją trzy rodzaje kwerend zdarzeń WMI:

  • zdarzenia wewnętrzne,
  • zewnętrzne zdarzenia
  • zdarzenia timera.

W skrócie postaram się przedstawić pierwszy z nich, czyli wewnętrzne zdarzenia które używane są do monitorowania zasobów reprezentowanych przez klasy w repozytorium CIM. Innym słowy, wewnętrzne zdarzenia występują w odpowiedzi na zmiany w standardowym modelu danych WMI. . WMI tworzy zdarzenia wewnętrzne dla obiektów przechowywanych w repozytorium WMI.

Najbardziej przydatne klasy wewnętrznych zdarzeń WMI:

__InstanceCreationEvent

Ta klasę używamy, gdy chcemy, aby otrzymać powiadomienie o tworzeniu instancji Na przykład, możemy użyć tej klasy gdy chcemy otrzymać powiadomienie za każdym razem o zdarzeniu utworzenia nowego procesu.

__InstanceDeletionEvent

Tą klasę używamy gdy chcemy otrzymać powiadomienie o usunięciu instancji. Analogicznie jak powyżej z tą różnicą że otrzymamy powiadomienie o każdym zakończonym procesie.

__InstanceModificationEvent

Ta klasa natomiast jest używana gdy chcemy monitorować zmiany na istniejącej instancji lub zasobie. Na przykład możemy użyć tej klasy gdy chcemy przekazać powiadomienie o zdarzeniu gdy wykorzystanie procesora wykracza poza próg określony przez zapytanie.

Ogólna składnia WQL dla wewnętrznych zdarzeń WMI:

W powyższej składni większość słów kluczowych jest znanych z SQL, oprócz słowa WITHIN które jest używane do określenia interwału sondowania dla zdarzeń. Można powiedzieć również że jest to  maksymalny odstęp w czasie jaki musi minąć zanim powiadomienie o zdarzeniu zostanie dostarczone.

Wartość określona jest jako liczba  w sekundach i jest liczbą zmienną przecinkową. Więc możemy określić wartości mniejszą niż jedna sekunda, trzeba pamiętać jednak że mniejszy niż jedna sekunda np. 0.2 może być przyczyną spowolnienia systemu z względu na intensywne wykorzystywanie zasobów przez zapytanie.

Rejestrując dwa zdarzenia możemy w prosty sposób monitorować podłączanie i odłączanie  urządzeń przenośnych, tworząc prosty dziennik zdarzeń w pliku tekstowym.

Na końcu warto wspomnieć o poleceniu Get-Job  którym możemy pobrać wszystkie zarejestrowane zdarzenia WMI, natomiast poleceniem Remove-Job możemy je usunąć.

Windows

Krótko o WMI Command-Line.

Windows Management Instrumentation Command-Line inaczej WMIC  zapewnia prosty konsolowy interfejs dla  Windows Management Instrumentation czyli po prostu WMI. Polecenie dostępne od Windows XP oprócz edycji Home i systemów z rodziny Windows Server 2003. Mimo małej popularności, WMIC jest narzędziem które daje nam sporo możliwości:

  • przeglądanie instancji klas WMI, używając aliasów które sprawiają obsługę WMI bardziej intuicyjną,
  • pracę z lokalnym, zdalnym lub wieloma komputerami za pomocą pojedynczej konsoli,
  • dostosowanie aliasów i formatów wejściowych w zależności do potrzeb,
  • tworzenie i wykonywanie skryptów opartych o WMIC.

Standardowo po wpisaniu /? otrzymamy treść pomocy. Warto zapoznać się z dostępnymi przełącznikami oraz aliasami. (1).

Praktycznym i przydatnym zastosowaniem polecenia może być zdalna deinstalacja oprogramowania która na przykład wcześniej nie została rozdystrybuowana poprzez polisy GPO. W tym celu możemy korzystać z przełączników /NODE oraz /USER przy połączeniu z zdalnym hostem (2),  bądź uruchomić konsole cmd z odpowiednimi poświadczeniami (3) i pomijać autoryzacje przy poleceniach.

Poleceniem >/NODE:10.100.100.220 PRODUCT GET NAME wyświetlimy zainstalowane oprogramowanie na stacji roboczej. Niestety lista ta nie będzie pełna, uwzględnia ona tylko oprogramowanie wykorzystujące narzędzie MsiExec, które zapewnia metody instalowania i modyfikowania programów oraz wykonywania operacji dotyczących Instalatora Windows z wiersza polecenia.

Używając klauzuli WHERE możemy „wybrać” aplikację, której chcemy się pozbyć, całe polecenie będzie wyglądać w ten sposób: >/NODE:10.100.100.220 PRODUCT WHERE=”7-Zip 9.20″ CALL UNINSTALL  Zostaniemy jeszcze poproszeni o potwierdzenie naszej decyzji (4).

Gdybyśmy chcieli jednocześnie zarządzać kilkoma hostami możemy zastosować polecenie >/FAILFAST:ON /NODE:10.100.100.220,10.100.100.221, 10.100.100.222 PRODUCT WHERE NAME=”7-ZIP 9.20″ CALL UNINSTALL /NOINTERACTIVE Zrzut, co prawda prezentuje zatrzymanie procesu na zdalnych hostach (5), ale zasada stosowania jest identyczna, przełącznik w poleceniu /NOINTERACTIVE zwalnia nas z obowiązku każdorazowego potwierdzania.

WMIC to na prawdę przydatne narzędzie i myślę że może niekiedy być alternatywą dla PowerShell.

Więcej informacji o WMIC: