Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 10956|Vastaus: 3

PowerShell kutsuu .net ja tilaa tapahtumia [lähdekoodi]

[Kopioi linkki]
Julkaistu 17.1.2017 17.05.59 | | | |


Käytän .net WebClient -objektia tiedostolatauksen toteuttamiseen,

Ja käytä PowerShelliä tilataksesi DownloadProgressChanged-tapahtuman,

Päivitin latauspalkin.

Tilaustapahtuma käyttää powershellin Register-ObjectEvent-toimintoa, ja johdantodokumentti on seuraava:

Tiivistelmä
    Tilaa tapahtumat, jotka Microsoft .NET Framework -objekti generoi.

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


tulo
    Ei mitään
    Et voi ohjata objekteja Register-ObjectEventiin .

Tulos
    System.Management.Automation.PSEventJob
    Tämä komento ei tuota mitään tulosta.

eksegeesi
    * Tapahtumat, tapahtumatilaukset ja tapahtumajono ovat olemassa vain nykyisessä istunnossa. Jos suljet nykyisen istunnon, tapahtumajono hylätään ja tapahtumatilaus peruutetaan.
   

esimerkki
    Esimerkki 1: Tilaa tapahtumat, kun uusi prosessi alkaa
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance on 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Tämä esimerkki sisältää tapahtumia, jotka syntyvät, kun uusi prosessi alkaa.

Komento käyttää ManagementEventWatcher-objektia saadakseen EventArrived-tapahtumat. Kyselyobjekti määrittelee, että tapahtumat ovat instanssiluontitapahtumia Win32_Process-luokalle.
    Esimerkki 2: Määritä toiminto, joka vastaa tapahtumaan
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance on '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" -Action $Action
    Id Name State HasMoreData Location -komento
    --    ----            -----      -----------     --------             -------
    2 422CFE5A-65E... Käynnissä True New-Event "PowerShe...
   
    Tämä esimerkki näyttää, miten toiminto määritellään vastaamaan tapahtumaan. Kun määrität toiminnon, nostetut tapahtumat eivät lisätä tapahtumajonoon. Sen sijaan toiminta reagoi tapahtumaan.

Tässä esimerkissä, kun instanssin luontitapahtuma nostetaan osoittamaan, että uusi prosessi on alkanut, syntyy uusi ProcessCreated-tapahtuma.

Toiminto käyttää $Sender- ja $EventArgs-automaattisia muuttujia, jotka täytetään vain tapahtumatoiminnoissa.

Register-ObjectEvent-komento palauttaa työobjektin, joka edustaa toimintoa, ja se toimii taustatehtävänä. Voit käyttää Job-komentoyksiköitä, kuten Get-Job ja Receive-Job, taustatyön hallintaan.

Lisätietoja löytyy osoitteesta about_Jobs.
    Esimerkki 3: Tilaa objektitapahtumat etätietokoneilla
    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", '
       (Uuden objektin aikaJakso 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}Enenable ProcessCreationEvent
   
    Tämä esimerkki osoittaa, miten tilata objektitapahtumia etätietokoneilla.

Ensimmäinen komento luo PSSessionit kahdelle etätietokoneelle ja tallentaa ne $S-muuttujaan.

Toinen komento käyttää Invoke-Command-komentoyksikön FilePath-parametria ajaakseen ProcessCreationEvent.ps1-skriptin kussakin PSSessionissa $S.

Skripti sisältää Register-ObjectEvent-komennon, joka tilaa instanssien luontitapahtumat Win32_Process oliolla ManagementEventWatcher-objektin ja sen EventArrivein kautta tapahtuma.
    Esimerkki 4: Käytä dynaamista moduulia PSEventJob-objektissa
    PS C:\>$Timer = Uusien objektien ajastimet. Ajastin
    PS C:\>$Timer.Väli = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Kulunut -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Format-List -ominaisuus *
    Osavaltio :
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    TilanViesti:
    HasMoreData : Totta
    Sijainti :
    Komento: $Random= Sattumanvarainen -Min 0 -Maksimi 100
    JobStateInfo : Juoksu
    Valmis: System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    Id : 1
    Nimi: Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Tässä esimerkissä näytetään, miten PSEventJob-olion dynaamista moduulia voidaan käyttää, kun tapahtumarekisteröintiin sisällytetään toiminto.

Ensimmäinen komento käyttää New-Object cmdletiä ajastinobjektin luomiseen. Toinen komento asettaa ajastimen väliksi 500 (millisekunti).

Kolmas komento käyttää Register-ObjectEvent -komentoyksikköä rekisteröidäkseen ajastinobjektin Elapsed-tapahtuman. Komento sisältää toiminnon, joka käsittelee tapahtumaa. Aina kun ajastimen väli päättyy, tapahtuma nostetaan ja toiminnon komennot käynnistyvät. Tässä tapauksessa Get-Random-komentoyksikkö generoi satunnaisen numeron välillä 0–100 ja tallentaa sen $Randomvariable.

Kun käytät Action-parametria Register-ObjectEvent-komennossa, komento palauttaa PSEventJob-objektin, joka edustaa toimintoa. Komento tallentaa työobjektin $Job-muuttujaan.

PSEventJob-olio, jonka Register-ObjectEvent -komento palauttaa, on myös saatavilla tapahtumatilaajan Action-ominaisuudessa. Lisätietoja löytyy osoitteesta Get-EventSubscriber.

Neljäs komento osoittaa, että $Job-muuttuja sisältää PSEventJob-objektin. Viides komento käyttää Format-List -komentoyksikköä näyttääkseen kaikki PSEventJob-objektin ominaisuudet listassa.

PSEventJobilla on Module-ominaisuus, joka sisältää dynaamisen skriptimoduulin, joka toteuttaa toiminnon.

Kuudes komento aktivoi ajastimen.

Loput komennot käyttävät kutsuoperaattoria (&) kutsuakseen komennon moduulissa ja näyttääkseen $Random muuttujan arvon. Voit käyttää kutsuoperaattoria kutsuaksesi minkä tahansa komennon moduulissa, mukaan lukien komennot, joita ei viety ulkomailta. Tässä tapauksessa komennot näyttävät satunnaisluvun, joka syntyy Epast-tapahtuman aikana.

Lisätietoja moduuleista löytyy osoitteesta about_Modules.


Liittyvät linkit
    Verkkoversio: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Uusi tapahtuma
    Register-EngineEvent
    Register-WmiEvent
    Remove-Event
    Unregister-Event
    Odotus-Tapahtuma

Lopuksi liitä PS-lähdekoodi:

Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyväVastaus





Edellinen:PowerShell-menetelmät yksirivisille kommenteille, monirivikommenteille ja lohkokommenteille
Seuraava:PowerShell käyttää WebClientia tiedostojen lataamiseen
Julkaistu 26.4.2017 14.35.44 |
132432423432423
Julkaistu 16.4.2019 17.14.12 |
2222222222222
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com