Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 10956|Odgovoriti: 3

PowerShell kliče .net in se naroča na dogodke [izvorna koda]

[Kopiraj povezavo]
Objavljeno na 17. 01. 2017 17:05:59 | | | |


Uporabljam .net WebClient objekt za izvedbo prenosa datotek,

In uporabite PowerShell za naročnino na dogodek DownloadProgressChanged,

Posodobil sem vrstico napredka prenosa.

Naročniški dogodek uporablja PowerShellov Register-ObjectEvent, uvodni dokument pa je naslednji:

Povzetek
    Naroči se na dogodke, ki jih generira objekt Microsoft .NET Framework.

slovnica
    Register-ObjectEvent [-InputObject] <PSObject> [-ImeDogodek] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Naprej] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]


Vhodni
    Nobenega
    Objektov ne morete povezati z Register-ObjectEvent .

Izhod
    System.Management.Automation.PSEventJob
    Ta cmdlet ne generira nobenega izhoda.

Exegesis
    * Dogodki, naročnine na dogodke in čakalna vrsta dogodkov obstajajo le v trenutni seji. Če zaprete trenutno sejo, se čakalna vrsta dogodkov zavrže in naročnina na dogodek prekliče.
   

primer
    Primer 1: Naročite se na dogodke, ko se začne 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"
   
    Ta primer se naroča na dogodke, ki nastanejo, ko se začne nov proces.

Ukaz uporablja objekt ManagementEventWatcher za pridobitev dogodkov EventArrivest. Objekt poizvedbe določa, da so dogodki dogodki ustvarjanja instanc za Win32_Process razred.
    Primer 2: Določite dejanje za odziv na dogodek
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance je 'Win32_Process'"
    PS C:\>$ProcessWatcher = Sistem.Management.ManagementManagementEventWatcher $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 ime State HasMoreData Location Command
    --    ----            -----      -----------     --------             -------
    2 422cfe5a-65e... Vodenje pravega novega dogodka "PowerShe...
   
    Ta primer prikazuje, kako določiti dejanje za odziv na dogodek. Ko določite dejanje, dogodki, ki se pojavijo, se ne dodajo v čakalno vrsto dogodkov. Namesto tega se dejanje odziva na dogodek.

V tem primeru, ko se sproži dogodek za ustvarjanje instance, ki označuje začetek novega procesa, se prikaže nov dogodek ProcessCreated.

Dejanje uporablja $Sender in $EventArgs samodejni spremenljivki, ki se napolnijo le za dejanja dogodkov.

Ukaz Register-ObjectEvent vrne objekt opravila, ki predstavlja dejanje in se izvaja kot ozadje opravila. Za upravljanje ozadja lahko uporabiš cmdleti za delo, kot sta Get-Job in Receive-Job.

Za več informacij glejte about_Jobs.
    Primer 3: Naročite se na objektne dogodke na oddaljenih računalnikih
    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", '
       (Časovni razpon novega objekta 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" -Naprej}EnableProcessCreationEvent
   
    Ta primer prikazuje, kako se naročiti na objektne dogodke na oddaljenih računalnikih.

Prvi ukaz ustvari PSSessions na dveh oddaljenih računalnikih in jih shrani v $S spremenljivko.

Drugi ukaz uporablja parameter FilePath iz cmdleta Call-Command za zagon skripte ProcessCreationEvent.ps1 v vsaki od PSSession v $S.

Skripta vključuje ukaz Register-ObjectEvent, ki se naroči na dogodke ustvarjanja instanc na objektu Win32_Process preko objekta ManagementEventWatcher in njegovega EventArrived dogodek.
    Primer 4: Uporabite dinamični modul v objektu PSEventJob
    PS C:\>$Timer = Timers za nove objekte. Timer
    PS C:\>$Timer.Interval = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Preteklo -SourceIdentifier Timer.Random -Action {$Random = Get-Random -min 0 -max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Format-List -Lastnost *
    Država:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusMessage :
    HasMoreData: Res
    Lokacija:
    Ukaz: $Random= Get-Random -Min 0 -Max 100
    JobStateInfo : Teče
    Končano: System.Threading.ManualResetEvent
    InstanceId : 88944290-133d-4b44-8752-f901bd8012e2
    ID : 1
    Ime: Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Ta primer prikazuje, kako uporabiti dinamični modul v objektu PSEventJob, ki se ustvari, ko vključite dejanje v registracijo dogodka.

Prvi ukaz uporablja cmdlet New-Object za ustvarjanje časovnika. Drugi ukaz nastavi interval časovnika na 500 (milisekund).

Tretji ukaz uporablja cmdlet Register-ObjectEvent za registracijo dogodka Elapsed objekta časovnika. Ukaz vključuje dejanje, ki obravnava dogodek. Kadar časovnik poteče, se dogodek sproži in ukazi v akciji se sprožijo. V tem primeru cmdlet Get-Random generira naključno število med 0 in 100 in ga shrani v $Randomvariable.

Ko v ukazu Register-ObjectEvent uporabite parameter Action, ukaz vrne objekt PSEventJob, ki predstavlja dejanje. Ukaz shrani objekt opravila v $Job spremenljivko.

Objekt PSEventJob, ki ga vrne cmdlet Register-ObjectEvent, je prav tako na voljo v lasti Action naročnika dogodka. Za več informacij obiščite Get-EventSubscriber.

Četrti ukaz pokaže, da spremenljivka $Job vsebuje objekt PSEventJob. Peti ukaz uporablja cmdlet Format-List za prikaz vseh lastnosti objekta PSEventJob v seznamu.

PSEventJob ima lastnost modula, ki vsebuje dinamični skriptni modul, ki izvaja to dejanje.

Šesti ukaz omogoči časovnik.

Preostali ukazi uporabljajo klicni operator (&) za klic ukaza v modulu in prikaz vrednosti $Random spremenljivke. Klicni operater lahko uporabite za klic kateregakoli ukaza v modulu, vključno z ukazi, ki niso izvozni. V tem primeru ukazi prikazujejo naključno številko, ki se generira, ko se zgodi dogodek Elapsed.

Za več informacij o modulih glejte about_Modules.


PovezanePovezave
    Spletna različica: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Novi dogodek
    Register-EngineEvent
    Register-WmiEvent
    Odstranitev dogodka
    Odjava-Dogodek
    Čakanje-dogodek

Na koncu priložite izvorno kodo PS:

Turisti, če želite videti skrito vsebino te objave, prosimOdgovoriti





Prejšnji:PowerShell metode za enovrstične komentarje, večvrstične komentarje in blok komentarje
Naslednji:PowerShell uporablja WebClient za prenos datotek
Objavljeno na 26. 04. 2017 14:35:44 |
132432423432423
Objavljeno na 16. 04. 2019 17:14:12 |
2222222222222
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com