Používam objekt .net WebClient na implementáciu sťahovania súborov,
A použite powershell na prihlásenie sa na odber udalosti DownloadProgressChanged,
Aktualizoval som ukazovateľ postupu sťahovania.
Predplatná udalosť používa Register-ObjectEvent v PowerShelle a úvodný dokument je nasledovný:
Abstrakt Prihlasuje sa na udalosti generované objektom Microsoft .NET Framework.
gramatika Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
vstup Žiadna Objekty nemôžete použiť na Register-ObjectEvent .
Výstup System.Management.Automation.PSEventJob Tento cmdlet negeneruje žiadny výstup.
Exegéza * Udalosti, odbery udalostí a fronta udalostí existujú iba v aktuálnej relácii. Ak uzavriete aktuálnu reláciu, fronta udalostí sa zruší a predplatné udalostí sa zruší.
príklad Príklad 1: Prihlásiť sa na udalosti, keď sa spustí nový proces PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance je 'Win32_Process'" PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
Tento príklad sa prihlási na udalosti generované pri spustení nového procesu.
Príkaz používa objekt ManagementEventWatcher na získanie udalostí EventArrivest. Objekt dotazu špecifikuje, že udalosti sú udalosti vytvárania inštancií pre triedu Win32_Process. Príklad 2: Špecifikovať akciu na reakciu na udalosť PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance je '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 Command -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... Skutočná nová udalosť "PowerShe...
Tento príklad ukazuje, ako špecifikovať akciu, ktorá má reagovať na udalosť. Keď zadáte akciu, udalosti, ktoré sa vyvolajú, sa do fronty udalostí nepridávajú. Namiesto toho akcia reaguje na udalosť.
V tomto príklade, keď sa spustí udalosť vytvorenia inštancie, ktorá signalizuje spustenie nového procesu, vyvolá sa nová udalosť ProcessCreated.
Akcia používa automatické premenné $Sender a $EventArgs, ktoré sa vyplnia iba pre akcie udalostí.
Príkaz Register-ObjectEvent vráti objekt úlohy, ktorý predstavuje akciu a spustí sa ako úloha na pozadí. Na správu úlohy na pozadí môžete použiť cmdlety Job, ako sú Get-Job a Receive-Job.
Pre viac informácií pozri about_Jobs. Príklad 3: Prihlásiť sa na objektové udalosti na vzdialených počítačoch 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", ' (Časový rozsah nového objektu 0,0,1), ' "TargetInstance je 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "Test" -Forward}Udalosť EnableProcessCreationEvent
Tento príklad ukazuje, ako sa prihlásiť na odber objektových udalostí na vzdialených počítačoch.
Prvý príkaz vytvára PSSessions na dvoch vzdialených počítačoch a ukladá ich do $S premennej.
Druhý príkaz používa parameter FilePath z cmdletu Invoke-Command na spustenie skriptu ProcessCreationEvent.ps1 v každej PSSession v $S.
Skript obsahuje príkaz Register-ObjectEvent, ktorý sa odoberá na udalosti vytvárania inštancií na Win32_Process objekte prostredníctvom objektu ManagementEventWatcher a jeho EventArrived udalosti. Príklad 4: Použite dynamický modul v objekte PSEventJob PS C:\>$Timer = Timers pre nové objekty. Časovač PS C:\>$Timer.Interval = 500 PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Uplynulo -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob PS C:\>$Job | Formát-List -Vlastnosť * Štát: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMessage : HasMoreData: Pravda Lokalita: Príkaz : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : Beh Dokončené: System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 1 Meno: Timer.Random ChildJobs : {}... PS C:\>$Timer.enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Tento príklad ukazuje, ako použiť dynamický modul v objekte PSEventJob, ktorý sa vytvorí, keď zahrniete akciu do registrácie udalosti.
Prvý príkaz využíva cmdlet New-Object na vytvorenie časovača. Druhý príkaz nastaví interval časovača na 500 (milisekúnd).
Tretí príkaz používa cmdlet Register-ObjectEvent na registráciu udalosti Elapsed objektu časovača. Príkaz obsahuje akciu, ktorá spracováva udalosť. Kedykoľvek časovač uplynie, spustí sa udalosť a spustia sa príkazy v akcii. V tomto prípade cmdlet Get-Random vygeneruje náhodné číslo medzi 0 a 100 a uloží ho do $Randomvariable.
Keď použijete parameter akcie v príkaze Register-ObjectEvent, príkaz vráti objekt PSEventJob, ktorý predstavuje akciu. Príkaz uloží objekt úlohy do $Job premennej.
Objekt PSEventJob, ktorý vracia cmdlet Register-ObjectEvent, je tiež dostupný vo vlastnosti Action účastníka udalosti. Pre viac informácií navštívte Get-EventSubscriber.
Štvrtý príkaz ukazuje, že premenná $Job obsahuje objekt PSEventJob. Piaty príkaz používa cmdlet Format-List na zobrazenie všetkých vlastností objektu PSEventJob v zozname.
PSEventJob má vlastnosť Module, ktorá obsahuje dynamický skriptový modul implementujúci túto akciu.
Šiesty príkaz aktivuje časovač.
Zvyšné príkazy používajú volací operátor (&) na vyvolanie príkazu v module a zobrazenie hodnoty $Random premennej. Volací operátor môžete použiť na vyvolanie akéhokoľvek príkazu v module, vrátane tých, ktoré nie sú exportované. V tomto prípade príkazy zobrazujú náhodné číslo, ktoré sa generuje v čase, keď nastane udalosť Elapsed.
Pre viac informácií o moduloch pozri about_Modules.
Súvisiace odkazy Online verzia: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nová udalosť Register-EngineEvent Register-WmiEvent Odstrániť udalosť Unregister-Event Čakacia udalosť Nakoniec pripojte zdrojový kód PS:
Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím. Odpoveď
|