Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 10956|Odpoveď: 3

PowerShell volá .net a odberá udalosti [zdrojový kód]

[Kopírovať odkaz]
Zverejnené 17. 1. 2017 17:05:59 | | | |


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ď





Predchádzajúci:PowerShell metódy pre jednoriadkové komentáre, viacriadkové komentáre a blokovacie komentáre
Budúci:PowerShell využíva WebClient na sťahovanie súborov
Zverejnené 26. 4. 2017 14:35:44 |
132432423432423
Zverejnené 16. 4. 2019 17:14:12 |
2222222222222
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com