|
|
Postat pe 17.01.2017 17:05:59
|
|
|
|

Folosesc obiectul .net WebClient pentru a implementa descărcarea fișierului,
Și folosește powershell pentru a te abona la evenimentul DownloadProgressChanged,
Bara de progres a descărcat a fost actualizată.
Evenimentul de abonament folosește Register-ObjectEvent de la powershell, iar documentul de introducere este următorul:
Rezumat Se abonează la evenimentele generate de un obiect Microsoft .NET Framework.
gramatică Registru-ObiectEveniment [-InputObject] <PSObject> [-NumeEveniment] <String> [[-IdentificatorSursă] <String>] [[-Acțiune] <ScriptBlock>[-Redirecționare] [-MaxTriggerCount<Int32>] [-MesajData<PSObject>] ] [-Eveniment de Suport ] [<CommonParameters>]
intrare Niciuna Nu poți transmite obiecte către Register-ObjectEvent .
Producție System.Management.Automation.PSEventJob Acest cmdlet nu generează niciun rezultat.
Exegeză * Evenimentele, abonamentele la evenimente și coada de evenimente există doar în sesiunea curentă. Dacă închizi sesiunea curentă, coada de evenimente este eliminată și abonamentul la eveniment este anulat.
exemplu Exemplul 1: Abonează-te la evenimente atunci când începe un proces nou PS C:\>$Query = System-Obiect Nou.Management.WqlEventQuery "__InstanceCreationEvent", (TimeSpan Obiect Nou 0,0,1), "InstanțăȚintă este 'Win32_Process'" PS C:\>$ProcessWatcher = Sistem de Obiecte Noi.Management.ManagementEventWatcher $Query PS C:\>Registru-ObiectEveniment -InputObject $ProcessWatcher -NumeEveniment "EvenimentArrivat"
Acest exemplu se abonează la evenimentele generate atunci când începe un proces nou.
Comanda folosește obiectul ManagementEventWatcher pentru a obține evenimentele EventArrived. Un obiect de interogare specifică că evenimentele sunt evenimente de creare a instanței pentru clasa Win32_Process. Exemplul 2: Specifică o acțiune pentru a răspunde unui eveniment PS C:\>$Query = System-Obiect Nou.Management.WqlEventQuery "__InstanceCreationEvent", (TimeSpan Obiect Nou 0,0,1), "InstanțăȚintă este 'Win32_Process'" PS C:\>$ProcessWatcher = Sistem de Obiecte Noi.Management.ManagementEventWatcher $query PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PS C:\\>register-objectEventEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action Comanda Id Name State HasMoreData Location -- ---- ----- ----------- -------- ------- 2 422cFe5A-65E... Rulând adevăratul eveniment nou "PowerShe...
Acest exemplu arată cum să specifici o acțiune pentru a răspunde unui eveniment. Când specifici o acțiune, evenimentele care sunt ridicate nu sunt adăugate în coada de evenimente. În schimb, acțiunea răspunde evenimentului.
În acest exemplu, când un eveniment de creare a instanței este ridicat indicând că a început un proces nou, se ridică un nou eveniment ProcesCreat.
Acțiunea folosește variabilele automate $Sender și $EventArgs care sunt populate doar pentru acțiunile evenimentelor.
Comanda Register-ObjectEvent returnează un obiect de lucru care reprezintă acțiunea, ce rulează ca job de fundal. Poți folosi comenzile Job, cum ar fi Get-Job și Receive-Job, pentru a gestiona jobul de fundal.
Pentru mai multe informații, vezi about_Jobs. Exemplul 3: Abonează-te la evenimente obiect pe calculatoare la distanță PS C:\>$S = New-PSSession -NumeCalculator "Server01, Server02" PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1 PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = Nou-Obiect System.Management.WqlEventQuery "__ InstanceCreationEvent", ' (Noul obiect TimpInterval 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = Sistem de Obiecte Noi.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcesCreat" Registru-ObiectEveniment -Input $ProcessWatcher -NumeEveniment "EvenimentAjuns" ' -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
Acest exemplu arată cum să te abonezi la evenimentele obiect pe calculatoare la distanță.
Prima comandă creează PSSessions pe două calculatoare la distanță și le salvează în variabila $S.
A doua comandă folosește parametrul FilePath al cmdlet-ului Invoke-Command pentru a rula scriptul ProcessCreationEvent.ps1 în fiecare dintre PSSessions din $S.
Scriptul include o comandă Register-ObjectEvent care se abonează la evenimentele de creare a instanței pe obiectul Win32_Process prin obiectul ManagementEventWatcher și EventArrived eveniment. Exemplul 4: Folosește modulul dinamic din obiectul PSEventJob PS C:\>$Timer = Temporizatoare pentru obiecte noi. Temporizator PS C:\>$Timer.Interval = 500 PS C:\>$Job = Registru-ObiectEveniment -InputObject $Timer -NumeEveniment Trecut -SourceIdentifier Timer.Random -Acțiune {$Random = Get-Random -Min 0 -Max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob PS C:\>$Job | Format-List -Proprietate * Stat: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMesaj: HasMoreData : Adevărat Locație: Comandă : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : Running Finalizat : System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 ID: 1 Nume: Timer.Random ChildJobs : {}... PS C:\>$Timer.Activat = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Acest exemplu arată cum să folosești modulul dinamic din obiectul PSEventJob care este creat atunci când incluzi o Acțiune într-o înregistrare a unui eveniment.
Prima comandă folosește cmdlet-ul New-Object pentru a crea un obiect timer. A doua comandă setează intervalul cronometrului la 500 (milisecunde).
A treia comandă folosește cmdlet-ul Register-ObjectEvent pentru a înregistra evenimentul Elapsed al obiectului timer. Comanda include o acțiune care gestionează evenimentul. Ori de câte ori intervalul de cronometru expiră, se ridică un eveniment și comenzile din acțiune se execută. În acest caz, cmdlet-ul Get-Random generează un număr aleator între 0 și 100 și îl salvează în $Randomvariable.
Când folosești un parametru Action într-o comandă Register-ObjectEvent, comanda returnează un obiect PSEventJob care reprezintă acțiunea. Comanda salvează obiectul jobului în variabila $Job.
Obiectul PSEventJob pe care cmdlet-ul Register-ObjectEvent îl returnează este de asemenea disponibil în proprietatea Action a abonatului evenimentului. Pentru mai multe informații, vezi Get-EventSubscriber.
A patra comandă arată că variabila $Job conține un obiect PSEventJob. A cincea comandă folosește cmdlet-ul Format-List pentru a afișa toate proprietățile obiectului PSEventJob într-o listă.
PSEventJob are o proprietate Module care conține un modul de script dinamic ce implementează acțiunea.
A șasea comandă activează cronometrul.
Comenzile rămase folosesc operatorul de apel (&) pentru a invoca comanda în modul și a afișa valoarea variabilei $Random. Poți folosi operatorul de apel pentru a invoca orice comandă dintr-un modul, inclusiv comenzile care nu sunt exportate. În acest caz, comenzile arată numărul aleatoriu generat atunci când apare evenimentul Elapsed.
Pentru mai multe informații despre module, vezi about_Modules.
Legături înrudite Versiunea online: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Eveniment Nou Register-EngineEvent Register-WmiEvent Remove-Event Un-Event-Out Eveniment de așteptare În final, atașează codul sursă PS:
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rog Răspunde
|
Precedent:Metode PowerShell pentru comentarii cu o singură linie, comentarii cu mai multe linii și comentarii blocUrmător:PowerShell utilizează WebClient-ul pentru a descărca fișiere
|