Windows PowerShell: Risposta a eventi WMI

Monitoraggio, notifiche e risposte agli eventi a livello di sistema: attività per le quali Windows offre funzionalità ottimali, ma che possono essere eseguite con Windows PowerShell in modo altrettanto efficiente.

Don Jones

Una delle cose ben sul sistema operativo Windows è il supporto per gli eventi. Ogni volta che un elemento si verifica nel sistema operativo, viene generato un evento. Parti di codice, ad esempio applicazioni, possono registrarsi per ricevere notifiche di eventi specifici in modo da rispondere con un'azione. Ad esempio, quando si fa clic su un pulsante in una finestra di dialogo, l'applicazione riceve una notifica di evento “ clic ” ed è in grado di eseguire qualsiasi ha previsto da eseguire quando un utente fa clic su tale pulsante.

Strumentazione gestione Windows (WMI) può inoltre generare eventi e registrare Windows PowerShell v2 per ricevere tali eventi. Quindi, è possibile utilizzare la shell per eseguire eventuali comandi si preferisce in risposta agli eventi. In genere viene generato uno di un numero relativamente piccolo di eventi WMI, ma può farlo per un grande intervallo di diverse classi WMI.

Esistono tre punti chiave per l'utilizzo degli eventi WMI:

  • sapere quale evento si desidera
  • conoscere la classe di cui si desidera che l'evento
  • utilizzando il cmdlet WMIEvent Registra per registrare le notifiche di eventi

Eventi semplici

Alcune classi WMI di generare eventi. Ad esempio, la classe Win32_ProcessStartTrace genera eventi ogni volta che viene avviato un processo. Verrà farlo anche in altre situazioni. Quando viene generato l'evento per un nuovo processo, dispone di un identificatore di origine “ processo avviato. ” Per registrare gli eventi, eseguire questo comando:

Register-WmiEvent –class "Win32_ProcessStartTrace" 
–sourceIdentifier "Process Started"

Naturalmente, semplicemente sapere che un processo avviato non è utile. È opportuno definire un'azione per il processo di accesso, inviare messaggi di posta elettronica o persino interrompere il processo.

Eseguire EventSubscriber Get per la sottoscrizione di notifica eventi che appena creato. Per rimuovere tutte le registrazioni di eventi, eseguire EventSubscriber Get | Annulla la registrazione eventi. È possibile utilizzare eventi di annullamento della registrazione per rimuovere una sottoscrizione dal numero di ID specifica.

Più eventi

Alcuni degli eventi a livello di sistema che WMI è in grado di produrre sono ancora più utili. Ad esempio, viene generato un evento denominato __instancecreationevent ogni volta che viene creata una nuova istanza di una classe WMI;__InstanceDeletionEvent viene generato quando viene eliminata un'istanza. Questo potrebbe non sembrare utile ma interazione utente su di esso, quasi tutti gli elementi dell'hardware del sistema operativo e il computer è rappresentata da un istanza di una classe WMI. Ad esempio Win32_LogicalDisk otterrà una nuova istanza quando si collega una periferica di archiviazione rimovibile. Quando si chiude un processo, Win32_Process perderà un'istanza.

Per visualizzare un messaggio quando gli utenti inseriscono una nuova unità USB?

Register-wmievent –query "select * from __instancecreationevent within 5 where targetinstance isa 'win32_logicaldisk'" –action { Write "You had better not put any proprietary information on that!" }

Tale query può essere piuttosto difficile da suddividere, ecco le operazioni eseguite:

  • SELECT * FROM __instancecreationevent (che è l'altro due caratteri di sottolineatura nell'evento name) semplicemente specifica che è necessario recuperare tutte le proprietà di quell'evento.
  • WITHIN 5 indica che si desidera solo ricercare eventi ogni cinque secondi. Non impostare questo numero troppo basso o verrà finiscono con una grande quantità di potenza di elaborazione dedicata a controllare costantemente gli aggiornamenti.
  • WHERE TARGET INSTANCE ISA "Win32_LogicalDisk"indica a WMI che vogliamo solo gli eventi che viene creata una nuova istanza della classe Win32_LogicalDisk.

Infine, il parametro –action è un blocco di script, racchiuso tra parentesi {}, che contiene l'azione desideriamo che si verificano quando viene generato l'evento.

Utilizzando il parametro –computerName per registrare gli eventi che si verificano su un computer remoto è un trucco ben. È necessario essere un amministratore locale nel computer remoto e l'azione verrà eseguita sul computer, non su quello remoto.

Come un inciso non essere tentati di registrare ad esempio Creazione eventi della classe CIM_DATAFile rappresenta i file su disco. WMI non è molto efficace alla creazione di nuovi file di monitoraggio. Sarà probabilmente perdere eventi e può imporre un overhead molto pesante nel tentativo di intercettare tutto.

Avvertenze e suggerimenti

Naturalmente, risposte per gli eventi solo per continuerà fino a quando la shell è in esecuzione. Quando si chiude la shell o chiude autonomamente per qualche motivo, la registrazione dell'evento non è più disponibile.

Che rende leggermente meno utile per l'esecuzione su computer di utenti ’ eventi WMI, perché si è improbabile che la shell e in esecuzione nel computer di tutti gli utenti a tutti i tempi. Questo può essere però un trucco utile per il monitoraggio di processi o altri elementi nei server in cui si dispone di maggiore controllo

All'interno di scriptblock –action è possibile accedere a un args automatico variabile denominata $, che contiene gli argomenti vengono passati dall'evento. Utilizzare Write $ args il scriptblock –action consente di visualizzare gli argomenti disponibili per un dato evento WMI.

Leggere un po' più sugli eventi WMI e relativi comandi della shell, la pagina TechNet WMI Event Monitoring .

Don Jones

Don Jones è un fondatore di tecnologia incentrati e risposte alle domande su Windows PowerShell e altre tecnologie di ConcentratedTech.com. È anche autore di Nexus.Realtimepublishers.com, molti dei suoi libri rende disponibile come libere edizioni elettroniche tramite il suo sito web.

Contenuto correlato