|
|
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å snill Svare
|
Foregående:PowerShell-metoder for enkeltlinjekommentarer, flerlinjekommentarer og blokkkommentarerNeste:PowerShell bruker WebClient for å laste ned filer
|