Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 10956|Svare: 3

PowerShell kaller .net og abonnerer på hendelser [kildekode]

[Kopier lenke]
Publisert på 17.01.2017 17:05:59 | | | |


Jeg bruker .net WebClient-objektet for å implementere filnedlastingen,

Og bruk PowerShell for å abonnere på DownloadProgressChanged-arrangementet,

Oppdaterte nedlastningslinjen.

Abonnementshendelsen bruker PowerShells Register-ObjectEvent, og introduksjonsdokumentet er som følger:

Sammendrag
    Abonnerer på hendelsene som genereres av et Microsoft .NET Framework-objekt.

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


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

Produksjon
    System.Management.Automation.PSEventJob
    Denne cmdleten genererer ingen utdata.

Eksegese
    * Hendelser, arrangementsabonnementer og hendelseskøen eksisterer kun i den nåværende økten. Hvis du lukker den nåværende økten, blir hendelseskøen fjernet og arrangementsabonnementet kansellert.
   

eksempel
    Eksempel 1: Abonner på hendelser når en ny prosess 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 eksempelet abonnerer på hendelser som genereres når en ny prosess starter.

Kommandoen bruker Objektet ManagementEventWatcher for å hente EventArrived-hendelser. Et spørringsobjekt spesifiserer at hendelsene er instansopprettelseshendelser for Win32_Process-klassen.
    Eksempel 2: Spesifiser en handling for å svare på en hendelse
    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 State HasMoreData lokasjonskommando
    --    ----            -----      -----------     --------             -------
    2 422cfe5A-65E... Kjører ekte nytt arrangement "PowerShe..."
   
    Dette eksempelet viser hvordan man kan spesifisere en handling som skal svare på en hendelse. Når du spesifiserer en handling, blir ikke hendelser som heves lagt til i hendelseskøen. I stedet reagerer handlingen på hendelsen.

I dette eksempelet, når en instansopprettelseshendelse opprettes som indikerer at en ny prosess er startet, opprettes en ny ProcessCreated-hendelse.

Handlingen bruker $Sender og $EventArgs automatiske variabler som kun fylles for hendelseshandlinger.

Kommandoen Register-ObjectEvent returnerer et jobbobjekt som representerer handlingen, og som kjøres som en bakgrunnsjobb. Du kan bruke jobb-cmdlets, som Get-Job og Receive-Job, for å administrere bakgrunnsjobben.

For mer informasjon, se about_Jobs.
    Eksempel 3: Abonner på objekthendelser på eksterne datamaskiner
    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 tidsspenn 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 eksempelet viser hvordan man abonnerer på objekthendelser på eksterne datamaskiner.

Den første kommandoen oppretter PSSessions på to eksterne datamaskiner og lagrer dem i $S-variabelen.

Den andre kommandoen bruker FilePath-parameteren til Invoke-Command-cmdleten for å kjøre ProcessCreationEvent.ps1-skriptet i hver av PSSessionene i $S.

Skriptet inkluderer en Register-ObjectEvent-kommando som abonnerer på instansopprettelseshendelser på Win32_Process-objektet gjennom ManagementEventWatcher-objektet og dets EventArrived arrangement.
    Eksempel 4: Bruk den dynamiske modulen i PSEventJob-objektet
    PS C:\>$Timer = Nye objekttimere.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 | Format-Liste -Egenskap *
    Tilstand:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusMelding:
    HasMoreData: Sant
    Beliggenhet:
    Kommando: $Random= Get-Random -Min 0 -Max 100
    JobStateInfo: Løper
    Ferdig: System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    ID: 1
    Navn: Timer. Tilfeldig
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Dette eksempelet viser hvordan man bruker den dynamiske modulen i PSEventJob-objektet som opprettes når du inkluderer en handling i en hendelsesregistrering.

Den første kommandoen bruker New-Object-cmdlet for å lage et timerobjekt. Den andre kommandoen setter tidsintervallet til 500 (millisekunder).

Den tredje kommandoen bruker Register-ObjectEvent-cmdleten for å registrere den forløpne hendelsen til timerobjektet. Kommandoen inkluderer en handling som håndterer hendelsen. Hver gang tidsintervallet går ut, blir en hendelse aktivert og kommandoene i handlingen kjøres. I dette tilfellet genererer Get-Random-cmdleten et tilfeldig tall mellom 0 og 100 og lagrer det i $Randomvariable.

Når du bruker en Action-parameter i en Register-ObjectEvent-kommando, returnerer kommandoen et PSEventJob-objekt som representerer handlingen. Kommandoen lagrer jobbobjektet i $Job-variabelen.

PSEventJob-objektet som Register-ObjectEvent-cmdleten returnerer, er også tilgjengelig i Action-egenskapen til hendelsesabonnenten. For mer informasjon, se Get-EventSubscriber.

Den fjerde kommandoen viser at $Job-variabelen inneholder et PSEventJob-objekt. Den femte kommandoen bruker cmdleten Format-List for å vise alle egenskapene til PSEventJob-objektet i en liste.

PSEventJob har en Module-egenskap som inneholder en dynamisk skriptmodul som implementerer handlingen.

Den sjette kommandoen aktiverer timeren.

De gjenværende kommandoene bruker kalloperatoren (&) for å kalle kommandoen i modulen og vise verdien til $Random variabelen. Du kan bruke call-operatoren til å utføre hvilken som helst kommando i en modul, inkludert kommandoer som ikke eksporteres. I dette tilfellet viser kommandoene det tilfeldige tallet som genereres når den forløpne hendelsen inntreffer.

For mer informasjon om moduler, se about_Modules.


Relaterte lenker
    Nettversjon: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Ny-arrangement
    Register-EngineEvent
    Register-WmiEvent
    Fjern-Hendelse
    Avregistrering-hendelse
    Vente-hendelse

Til slutt, legg ved PS-kildekoden:

Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snillSvare





Foregående:PowerShell-metoder for enkeltlinjekommentarer, flerlinjekommentarer og blokkkommentarer
Neste:PowerShell bruker WebClient for å laste ned filer
Publisert på 26.04.2017 14:35:44 |
132432423432423
Publisert på 16.04.2019 17:14:12 |
2222222222222
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com