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 venlig Svar
|