Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 10956|Svar: 3

PowerShell kalder .net og abonnerer på begivenheder [kildekode]

[Kopier link]
Opslået på 17/01/2017 17.05.59 | | | |


Jeg bruger .net WebClient-objektet til at implementere fil-downloaden,

Og brug PowerShell til at abonnere på DownloadProgressChanged-begivenheden,

Opdaterede download-statuslinjen.

Abonnementsbegivenheden bruger PowerShells Register-ObjectEvent, og introduktionsdokumentet er som følger:

Resumé
    Abonnerer på de begivenheder, der genereres af et Microsoft .NET Framework-objekt.

grammatik
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent] [<CommonParameters>]


indgang
    Ingen
    Du kan ikke sende objekter til Register-ObjectEvent .

Output
    System.Management.Automation.PSEventJob
    Denne cmdlet genererer ikke noget output.

Eksegese
    * Events, event-abonnementer og event-køen eksisterer kun i den aktuelle session. Hvis du lukker den nuværende session, bliver event-køen kasseret, og event-abonnementet annulleres.
   

eksempel
    Eksempel 1: Abonner på begivenheder, når en ny proces starter
    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"
   
    Dette eksempel abonnerer på begivenheder, der genereres, når en ny proces starter.

Kommandoen bruger Objektet ManagementEventWatcher til at hente EventArrived-events. Et forespørgselsobjekt angiver, at begivenhederne er instansoprettelsesbegivenheder for Win32_Process-klassen.
    Eksempel 2: Angiv en handling for at reagere på en begivenhed
    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" -handling $Action
    ID-navn Tilstandskommando HasMoreData Location
    --    ----            -----      -----------     --------             -------
    2 422cfe5A-65e... Kører ægte ny-event "PowerShe...
   
    Dette eksempel viser, hvordan man specificerer en handling til at reagere på en begivenhed. Når du specificerer en handling, tilføjes begivenheder, der bliver hævet, ikke til hændelseskøen. I stedet reagerer handlingen på begivenheden.

I dette eksempel, når en instansoprettelsesbegivenhed oprettes, hvilket indikerer, at en ny proces er startet, oprettes en ny ProcessCreated-begivenhed.

Handlingen bruger $Sender og $EventArgs automatiske variable, som kun udfyldes for hændelseshandlinger.

Kommandoen Register-ObjectEvent returnerer et jobobjekt, der repræsenterer handlingen, og som kører som et baggrundsjob. Du kan bruge job-cmdlets, såsom Get-Job og Receive-Job, til at administrere baggrundsjobbet.

For mere information, se about_Jobs.
    Eksempel 3: Abonner på objektbegivenheder på fjerncomputere
    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", '
       (Ny-Objekt-tidsspænd 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
   
    Dette eksempel viser, hvordan man abonnerer på objektbegivenheder på fjerncomputere.

Den første kommando opretter PSSessions på to fjerncomputere og gemmer dem i $S-variablen.

Den anden kommando bruger FilePath-parameteren fra Invoke-Command-cmdlet'en til at køre ProcessCreationEvent.ps1-scriptet i hver af PSSessions i $S.

Scriptet indeholder en Register-ObjectEvent-kommando, der abonnerer på instansoprettelsesbegivenheder på det Win32_Process objekt via ManagementEventWatcher-objektet og dets EventArrived begivenhed.
    Eksempel 4: Brug det dynamiske modul i PSEventJob-objektet
    PS C:\>$Timer = Nye objekttimere.Timer
    PS C:\>$Timer.Interval = 500
    PS C:\>$Job = Register-ObjectEvent -InputObjekt $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 | Format-Liste -Egenskab *
    Tilstand:
    RunningModule: __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusBesked:
    HasMoreData: Sandt
    Beliggenhed:
    Kommando : $Random= Get-Random -Min 0 -Max 100
    JobStateInfo: Løber
    Færdig: System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    ID: 1
    Navn: Timer. Tilfældig
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Dette eksempel viser, hvordan man bruger det dynamiske modul i PSEventJob-objektet, som oprettes, når du inkluderer en handling i en begivenhedsregistrering.

Den første kommando bruger New-Object-cmdlet'en til at oprette et timerobjekt. Den anden kommando sætter timerens interval til 500 (millisekunder).

Den tredje kommando bruger Register-ObjectEvent-cmdlet'en til at registrere den forløbne hændelse for timerobjektet. Kommandoen indeholder en handling, der håndterer begivenheden. Når timerintervallet udløber, aktiveres en begivenhed, og kommandoerne i handlingen kører. I dette tilfælde genererer Get-Random-cmdlet'en et tilfældigt tal mellem 0 og 100 og gemmer det i $Randomvariable.

Når du bruger en Action-parameter i en Register-ObjectEvent-kommando, returnerer kommandoen et PSEventJob-objekt, der repræsenterer handlingen. Kommandoen gemmer jobobjektet i $Job-variablen.

PSEventJob-objektet, som Register-ObjectEvent-cmdlet returnerer, er også tilgængeligt i Action-egenskaben for begivenhedsabonnenten. For mere information, se Get-EventSubscriber.

Den fjerde kommando viser, at $Job-variabelen indeholder et PSEventJob-objekt. Den femte kommando bruger Format-List cmdlet'en til at vise alle egenskaberne for PSEventJob-objektet i en liste.

PSEventJob har en Module-egenskab, der indeholder et dynamisk scriptmodul, som implementerer handlingen.

Den sjette kommando aktiverer timeren.

De resterende kommandoer bruger kaldsoperatoren (&) til at påkalde kommandoen i modulet og vise værdien af den $Random variabel. Du kan bruge kaldsoperatoren til at påkalde enhver kommando i et modul, inklusive kommandoer, der ikke eksporteres. I dette tilfælde viser kommandoerne det tilfældige tal, der genereres, når den forfaldne hændelse opstår.

For mere information om moduler, se about_Modules.


Relaterede links
    Onlineversion: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Ny-Event
    Register-EngineEvent
    Register-WmiEvent
    Fjern-Begivenhed
    Afregistreringsbegivenhed
    Vent-Event

Endelig vedhæfter PS-kildekoden:

Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venligSvar





Tidligere:PowerShell-metoder til enkeltlinjekommentarer, flerlinjekommentarer og blokkommentarer
Næste:PowerShell bruger WebClient til at downloade filer
Opslået på 26/04/2017 14.35.44 |
132432423432423
Opslået på 16/04/2019 17.14.12 |
2222222222222
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com