Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 10956|Antwoord: 3

PowerShell roept .net aan en abonneert zich op gebeurtenissen [broncode]

[Link kopiëren]
Geplaatst op 17-01-2017 17:05:59 | | | |


Ik gebruik het .net WebClient-object om het bestand te downloaden,

En gebruik PowerShell om je te abonneren op het DownloadProgressChanged-evenement,

De voortgangsbalk van de download bijgewerkt.

Het abonnementsevenement gebruikt PowerShell's Register-ObjectEvent, en het introductiedocument is als volgt:

Samenvatting
    Abonnert zich op de gebeurtenissen die worden gegenereerd door een Microsoft .NET Framework-object.

grammatica
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Actie] <ScriptBlock>] [-Doorsturen] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]


invoer
    Geen enkele
    Je kunt objecten niet naar Register-ObjectEvent sturen.

Output
    System.Management.Automation.PSEventJob
    Deze cmdlet genereert geen output.

exegese
    * Evenementen, evenementabonnementen en de evenementenwachtrij bestaan alleen in de huidige sessie. Als je de huidige sessie sluit, wordt de eventwachtrij verwijderd en wordt het eventabonnement opgezegd.
   

voorbeeld
    Voorbeeld 1: Abonner je op gebeurtenissen wanneer een nieuw proces start
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Dit voorbeeld sluit aan bij gebeurtenissen die worden gegenereerd wanneer een nieuw proces begint.

Het commando gebruikt het object: ManagementEventWatcher om EventArrived events op te halen. Een queryobject specificeert dat de gebeurtenissen instantiecreatie-events zijn voor de Win32_Process klasse.
    Voorbeeld 2: Specificeer een actie om op een gebeurtenis te reageren
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
    PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance }
    PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -actie $Action
    Id-naam State HasMoreData Locatiecommando
    --    ----            -----      -----------     --------             -------
    2 422cfe5A-65E... Echt Nieuw Evenement "PowerShe...
   
    Dit voorbeeld laat zien hoe je een actie specificeert om op een gebeurtenis te reageren. Wanneer je een actie specificeert, worden gebeurtenissen die worden verhoogd niet toegevoegd aan de gebeurteniswachtrij. In plaats daarvan reageert de actie op het voorval.

In dit voorbeeld, wanneer een instance creation-event wordt geactiveerd dat aangeeft dat een nieuw proces is gestart, wordt een nieuw ProcessCreated-event geactiveerd.

De actie gebruikt de $Sender en $EventArgs automatische variabelen die alleen worden ingevuld voor gebeurtenisacties.

Het Register-ObjectEvent-commando geeft een taakobject terug dat de actie vertegenwoordigt, en dat als achtergrondtaak wordt uitgevoerd. Je kunt de Job-cmdlets, zoals Get-Job en Receive-Job, gebruiken om de achtergrondjob te beheren.

Voor meer informatie, zie about_Jobs.
    Voorbeeld 3: Abonneer je op objectgebeurtenissen op externe computers
    PS C:\>$S = New-PSSession -ComputerName "Server01, Server02"
    PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
    PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ InstanceCreationEvent", '
       (Nieuw-Object TijdSpan 0,0,1), '
       "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" '
       -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
   
    Dit voorbeeld laat zien hoe je je kunt abonneren op objectgebeurtenissen op externe computers.

Het eerste commando maakt PSSessions aan op twee externe computers en slaat deze op in de $S variabele.

Het tweede commando gebruikt de FilePath-parameter van de Invoke-Command cmdlet om het ProcessCreationEvent.ps1-script in elk van de PSSessions in $S uit te voeren.

Het script bevat een Register-ObjectEvent-commando dat zich abonneert op instantiecreatie-evenementen op het Win32_Process object via het ManagementEventWatcher-object en zijn EventArrived gebeurtenis.
    Voorbeeld 4: Gebruik de dynamische module in het PSEventJob-object
    PS C:\>$Timer = Nieuwe-Object Timers.Timer
    PS C:\>$Timer.Interval = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Formaatlijst -Eigenschap *
    Staat:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusBericht :
    HasMoreData: Waar.
    Locatie:
    Commando : $Random= Get-Random -Min 0 -Max 100
    JobStateInfo : Running
    Voltooid : System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    ID: 1
    Naam: Timer. Willekeurig
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Dit voorbeeld laat zien hoe je de dynamische module in het PSEventJob-object kunt gebruiken dat wordt aangemaakt wanneer je een actie toevoegt aan een gebeurtenisregistratie.

Het eerste commando gebruikt de cmdlet New-Object om een timerobject te creëren. Het tweede commando stelt het interval van de timer in op 500 (milliseconden).

Het derde commando gebruikt de cmdlet Register-ObjectEvent om het verlopen evenement van het timerobject te registreren. Het commando bevat een actie die het evenement afhandelt. Telkens wanneer het timerinterval verstreken, wordt een gebeurtenis geactiveerd en worden de commando's in de actie uitgevoerd. In dit geval genereert de Get-Random cmdlet een willekeurig getal tussen 0 en 100 en slaat dit op in de $Randomvariable.

Wanneer je een Actie-parameter gebruikt in een Register-ObjectEvent-commando, geeft het commando een PSEventJob-object terug dat de actie vertegenwoordigt. Het commando slaat het taakobject op in de $Job variabele.

Het PSEventJob-object dat de Register-ObjectEvent-cmdlet teruggeeft, is ook beschikbaar in de eigenschap Action van de gebeurtenisabonnee. Voor meer informatie, zie Get-EventSubscriber.

Het vierde commando toont aan dat de variabele $Job een PSEventJob-object bevat. Het vijfde commando gebruikt de Format-List cmdlet om alle eigenschappen van het PSEventJob-object in een lijst weer te geven.

De PSEventJob heeft een Module-eigenschap die een dynamische scriptmodule bevat die de actie uitvoert.

Het zesde commando schakelt de timer in.

De overige commando's gebruiken de aanroepoperator (&) om het commando in de module aan te roepen en de waarde van de $Random variabele weer te geven. Je kunt de call operator gebruiken om elk commando in een module aan te roepen, inclusief commando's die niet geëxporteerd zijn. In dit geval tonen de commando's het willekeurige getal dat wordt gegenereerd wanneer het verstreken evenement plaatsvindt.

Voor meer informatie over modules, zie about_Modules.


Gerelateerde links
    Online versie: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Nieuw Evenement
    Register-EngineEvent
    Register-WmiEvent
    Verwijder-Gebeurtenis
    Unregister-Event
    Wacht-Event

Voeg tot slot de PS-broncode toe:

Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieftAntwoord





Vorig:PowerShell-methoden voor enkelregelige opmerkingen, meerregelige opmerkingen en blokopmerkingen
Volgend:PowerShell gebruikt de WebClient om bestanden te downloaden
Geplaatst op 26-04-2017 14:35:44 |
132432423432423
Geplaatst op 16-04-2019 17:14:12 |
2222222222222
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com