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
|