Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 10956|Răspunde: 3

PowerShell apelează .net și se abonează la evenimente [cod sursă]

[Copiază linkul]
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ă rogRăspunde





Precedent:Metode PowerShell pentru comentarii cu o singură linie, comentarii cu mai multe linii și comentarii bloc
Următor:PowerShell utilizează WebClient-ul pentru a descărca fișiere
Postat pe 26.04.2017 14:35:44 |
132432423432423
Postat pe 16.04.2019 17:14:12 |
2222222222222
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com