Een programma uitvoeren vanaf de opdrachtregel op basis van een gebeurtenis
De klasse CommandLineEventConsumer voert een opgegeven uitvoerbaar programma uit vanaf een opdrachtregel wanneer een opgegeven gebeurtenis plaatsvindt. Deze klasse is een standaardconsumer voor gebeurtenissen die door WMI wordt geleverd.
Wanneer u CommandLineEventConsumergebruikt, moet u het uitvoerbare bestand beveiligen dat u wilt starten. Als het uitvoerbare bestand zich niet op een veilige locatie bevindt of niet is beveiligd met een sterke ACL (Access Control List), kan een gebruiker zonder toegangsbevoegdheden uw uitvoerbare bestand vervangen door een ander uitvoerbaar bestand. U kunt de Win32_LogicalFileSecuritySetting of Win32_LogicalShareSecuritySetting klassen gebruiken om programmatisch de beveiliging van een bestand of share te wijzigen. Zie Een beveiligingsdescriptor maken voor een nieuw object in C++voor meer informatie.
De basisprocedure voor het gebruik van standaardconsumenten is altijd hetzelfde en bevindt zich in Monitoren en Reageren op Gebeurtenissen met Standaardconsumenten. De volgende procedure voegt toe aan de basisprocedure, is specifiek voor de CommandLineEventConsumer klasse en beschrijft hoe u een gebeurtenisconsumer maakt die een programma uitvoert.
Voorzichtigheid
De klasse CommandLineEventConsumer heeft speciale beveiligingsbeperkingen. Deze standaardgebruiker moet worden geconfigureerd door een lokaal lid van de groep Administrators op de lokale computer. Als u een domeinaccount gebruikt om het abonnement te maken, moet het LocalSystem-account over de benodigde machtigingen voor het domein beschikken om te controleren of de maker lid is van de lokale groep Administrators.
CommandLineEventConsumer kan niet worden gebruikt om een proces te starten dat interactief wordt uitgevoerd.
In de volgende procedure wordt beschreven hoe u een gebeurtenisconsumer maakt waarmee een proces vanaf een opdrachtregel wordt uitgevoerd.
Een gebeurtenisconsumer maken die een proces uitvoert vanaf een opdrachtregel
- Maak in het MOF-bestand (Managed Object Format) een exemplaar van CommandLineEventConsumer om de gebeurtenissen te ontvangen die u in de query aanvraagt. Zie MOF-klassen (Managed Object Format) ontwerpenvoor meer informatie.
- Maak een exemplaar van __EventFilter en geef deze een naam.
- Maak een query om het type gebeurtenis op te geven. Zie Query's uitvoeren met WQL-voor meer informatie.
- Maak een exemplaar van __FilterToConsumerBinding om het filter te koppelen aan het exemplaar van CommandLineEventConsumer.
- Compileer uw MOF-bestand met behulp van Mofcomp.exe.
Voorbeeld
In het volgende codevoorbeeld wordt een nieuwe klasse met de naam MyCmdLineConsumer gemaakt om gebeurtenissen te genereren wanneer aan het einde van een MOF een exemplaar van de nieuwe klasse wordt gemaakt. Het voorbeeld is in MOF-code, maar u kunt de exemplaren programmatisch maken met behulp van de Scripting-API voor WMI- of de COM-API voor WMI-.
In de volgende procedure wordt beschreven hoe u een nieuwe klasse maakt met de naam MyCmdLineConsumer.
Een nieuwe klasse maken met de naam MyCmdLineConsumer
- Maak het bestand c:\cmdline_test.bat met een opdracht waarmee een zichtbaar programma wordt uitgevoerd, zoals 'calc.exe'.
- Kopieer de MOF naar een tekstbestand en sla het bestand op met de extensie .mof.
- Compileer het MOF-bestand in een opdrachtvenster met behulp van de volgende opdracht: Mofcomp bestandsnaam.mof.
Notitie
Het programma dat is opgegeven in cmdline_test.bat moet worden uitgevoerd.
// Set the namespace as root\subscription.
// The CommandLineEventConsumer is already compiled
// in the root\subscription namespace.
#pragma namespace ("\\\\.\\Root\\subscription")
class MyCmdLineConsumer
{
[key]string Name;
};
// Create an instance of the command line consumer
// and give it the alias $CMDLINECONSUMER
instance of CommandLineEventConsumer as $CMDLINECONSUMER
{
Name = "CmdLineConsumer_Example";
CommandLineTemplate = "c:\\cmdline_test.bat";
RunInteractively = True;
WorkingDirectory = "c:\\";
};
// Create an instance of the event filter
// and give it the alias $CMDLINEFILTER
// The filter queries for instance creation event
// for instances of the MyCmdLineConsumer class
instance of __EventFilter as $CMDLINEFILTER
{
Name = "CmdLineFilter";
Query = "SELECT * FROM __InstanceCreationEvent"
" WHERE TargetInstance.__class = \"MyCmdLineConsumer\"";
QueryLanguage = "WQL";
};
// Create an instance of the binding
// between filter and consumer instances.
instance of __FilterToConsumerBinding
{
Consumer = $CMDLINECONSUMER;
Filter = $CMDLINEFILTER;
};
// Create an instance of this class right now.
// The commands in c:\\cmdline_test.bat execute
// as the result of creating the instance
// of MyCmdLineConsumer.
instance of MyCmdLineConsumer
{
Name = "CmdLineEventConsumer test";
};
Verwante onderwerpen