Používám objekt .net WebClient k implementaci stahování souborů,
A použijte powershell k odběru události DownloadProgressChanged,
Aktualizoval jsem ukazatel průběhu stahování.
Událost předplatného používá Register-ObjectEvent v powershellu a úvodní dokument je následující:
Abstrakt Přihlašuje se k událostem generovaným objektem Microsoft .NET Framework.
gramatika Registr-ObjektUdálost [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount <Int32>] [-MessageData<PSObject>. ] [-SupportEvent] [<CommonParameters>]
vstup Žádné Objekty nelze použít do Register-ObjectEvent .
Výstup System.Management.Automation.PSEventJob Tento cmdlet negeneruje žádný výstup.
exegeze * Události, odběry událostí a fronta událostí existují pouze v aktuální relaci. Pokud ukončíte aktuální relaci, fronta událostí se zruší a předplatné události je zrušeno.
příklad Příklad 1: Odebírejte události při zahájení nového procesu 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 příklad se přijímá k událostem generovaným při spuštění nového procesu.
Příkaz používá objekt ManagementEventWatcher k získání událostí EventArrived. Dotazovací objekt specifikuje, že události jsou událostmi vytváření instance pro třídu Win32_Process. Příklad 2: Specifikujte akci, která má reagovat na událost 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... Vedení skutečné nové události "PowerShe...
Tento příklad ukazuje, jak specifikovat akci, která má reagovat na událost. Když zadáte akci, události, které se vyvolají, se do fronty událostí nepřidají. Místo toho akce reaguje na událost.
V tomto příkladu, když je vyvolána událost vytvoření instance, která oznamuje spuštění nového procesu, vyvolá se nová událost ProcessCreated.
Akce využívá automatické proměnné $Sender a $EventArgs, které se vyplňují pouze pro akce událostí.
Příkaz Register-ObjectEvent vrací objekt úlohy, který akci reprezentuje a ta se spustí jako úloha na pozadí. Můžete použít Job cmdlety, jako jsou Get-Job a Receive-Job, k řízení pozadí práce.
Pro více informací viz about_Jobs. Příklad 3: Přihlásit se k odběru objektových událostí na vzdálených počítačích 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é období 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}EnableProcessCreationEvent
Tento příklad ukazuje, jak se přihlásit k odběru objektových událostí na vzdálených počítačích.
První příkaz vytváří PSSessions na dvou vzdálených počítačích a ukládá je do proměnné $S.
Druhý příkaz využívá parametr FilePath v příkazu Invoke-Command k spuštění skriptu ProcessCreationEvent.ps1 v každé z PSSession v $S.
Skript obsahuje příkaz Register-ObjectEvent, který se přihlašuje k událostem vytváření instance na objektu Win32_Process prostřednictvím objektu ManagementEventWatcher a jeho EventArrived události. Příklad 4: Použijte dynamický modul v objektu PSEventJob PS C:\>$Timer = Časovače pro 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 -vlastnost * Stav : RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMessage : HasMoreData: Pravda Lokalita: Příkaz : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : Běh Dokončeno: System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 1 Jméno: Timer.Random ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Tento příklad ukazuje, jak použít dynamický modul v objektu PSEventJob, který vzniká, když zahrnete akci do registrace události.
První příkaz používá příkaz New-Object k vytvoření časovače. Druhý příkaz nastaví interval časovače na 500 (milisekund).
Třetí příkaz využívá cmdlet Register-ObjectEvent k registraci události Elapsed objektu časovače. Příkaz obsahuje akci, která událost zvládne. Kdykoli časovač uplyne, událost se spustí a spustí se příkazy v akci. V tomto případě cmdlet Get-Random vygeneruje náhodné číslo mezi 0 a 100 a uloží ho do $Randomvariable.
Když použijete parametr akce v příkazu Register-ObjectEvent, příkaz vrátí objekt PSEventJob, který tuto akci reprezentuje. Příkaz uloží objekt práce do proměnné $Job.
Objekt PSEventJob, který vrací cmdlet Register-ObjectEvent, je také dostupný ve vlastnosti Action účastníka události. Pro více informací navštivte Get-EventSubscriber.
Čtvrtý příkaz ukazuje, že proměnná $Job obsahuje objekt PSEventJob. Pátý příkaz používá cmdlet Format-List k zobrazení všech vlastností objektu PSEventJob v seznamu.
PSEventJob má vlastnost Module, která obsahuje dynamický skriptový modul implementující akci.
Šestý příkaz aktivuje časovač.
Zbývající příkazy používají volací operátor (&) k vyvolání příkazu v modulu a zobrazení hodnoty proměnné $Random. Operátor volání můžete použít k vyvolání libovolného příkazu v modulu, včetně těch, které nejsou exportovány. V tomto případě příkazy ukazují náhodné číslo, které je generováno v okamžiku události Elapsed.
Pro více informací o modulech viz about_Modules.
Související odkazy Online verze: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nová událost Register-EngineEvent Register-WmiEvent Odebrání události Událost odregistrovat Wait-Event Nakonec přiložte zdrojový kód PS:
Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosím Odpověď
|