Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 10956|Atbildi: 3

PowerShell izsauc .net un abonē notikumus [avota kods]

[Kopēt saiti]
Publicēts 17.01.2017 17:05:59 | | | |


Es izmantoju .net WebClient objektu, lai īstenotu failu lejupielādi,

Un izmantojiet powershell, lai abonētu notikumu DownloadProgressChanged,

Atjaunināta lejupielādes norises josla.

Abonēšanas notikums izmanto powershell Register-ObjectEvent, un ievaddokuments ir šāds:

Anotācija
    Abonē notikumus, ko ģenerē Microsoft .NET Framework objekts.

gramatika
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward ] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]


Ievades
    Nav
    Objektus nevar novirzīt uz Register-ObjectEvent .

Rezultāts
    System.Management.Automation.PSEventJob
    Šis cmdlet neģenerē izvadi.

Ekseģēze
    * Notikumi, pasākumu abonementi un notikumu rinda pastāv tikai pašreizējā sesijā. Ja aizverat pašreizējo sesiju, notikumu rinda tiek atmesta un pasākuma abonements tiek atcelts.
   

piemērs
    1. piemērs: pasākumu abonēšana, kad tiek sākts jauns process
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Šajā piemērā tiek abonēti notikumi, kas ģenerēti, sākot jaunu procesu.

Komanda izmanto objektu ManagementEventWatcher, lai iegūtu notikumus EventArrived. Vaicājuma objekts norāda, ka notikumi ir Win32_Process klases instances izveides notikumi.
    2. piemērs: darbības norādīšana, lai atbildētu uz notikumu
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa '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 nosaukuma stāvokļa komanda HasMoreData atrašanās vieta
    --    ----            -----      -----------     --------             -------
    2 422cfe5a-65e... Īsta jauna pasākuma "PowerShe...
   
    Šajā piemērā ir parādīts, kā norādīt darbību, lai atbildētu uz notikumu. Norādot darbību, izvirzītie notikumi netiek pievienoti notikumu rindai. Tā vietā darbība reaģē uz notikumu.

Šajā piemērā, kad tiek izvirzīts instances izveides notikums, kas norāda, ka ir sākts jauns process, tiek parādīts jauns notikums ProcessCreated.

Darbībā tiek izmantoti $Sender un $EventArgs automātiskie mainīgie, kas tiek aizpildīti tikai notikumu darbībām.

Komanda Register-ObjectEvent atgriež darba objektu, kas attēlo darbību, kas tiek izpildīta kā fona darbs. Lai pārvaldītu fona darbu, varat izmantot cmdlet komandas, piemēram, Get-Job un Receive-Job.

Papildinformāciju skatiet about_Jobs.
    3. piemērs: objektu notikumu abonēšana attālajos datoros
    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", "
       (jauna objekta TimeSpan 0,0,1), "
       "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" '
       -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
   
    Šajā piemērā parādīts, kā abonēt objekta notikumus attālajos datoros.

Pirmā komanda izveido PSSessions divos attālos datoros un saglabā tos mainīgajā $S.

Otrā komanda izmanto cmdlet komandas Invoke-Command parametru FilePath, lai palaistu skriptu ProcessCreationEvent.ps1 katrā no PSSessions $S.

Skripts ietver komandu Register-ObjectEvent, kas abonē instances izveides notikumus Win32_Process objektā, izmantojot objektu ManagementEventWatcher un tā EventArrived notikums.
    4. piemērs: dinamiskā moduļa izmantošana objektā PSEventJob
    PS C:\>$Timer = Jauno objektu taimeri.Taimeris
    PS C:\>$Timer.Intervāls = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -min 0 -max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Formāta saraksts -Īpašums *
    Valsts:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    Statusa ziņojums:
    HasMoreData : Patiess
    Atrašanās vieta :
    Komanda: $Random= Get-Random -min 0 -max 100
    JobStateInfo : Darbojas
    Pabeigts: System.Threading.ManualResetEvent
    InstanceId : 88944290-133d-4b44-8752-f901bd8012e2
    Identifikācijas numurs : 1
    Nosaukums : Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Šajā piemērā parādīts, kā izmantot dinamisko moduli objektā PSEventJob, kas tiek izveidots, iekļaujot darbību notikuma reģistrācijā.

Pirmā komanda izmanto cmdlet komandu New-Object, lai izveidotu taimera objektu. Otrā komanda iestata taimera intervālu uz 500 (milisekundes).

Trešā komanda izmanto cmdlet komandu Register-ObjectEvent, lai reģistrētu taimera objekta pagājušo notikumu. Komanda ietver darbību, kas apstrādā notikumu. Ikreiz, kad beidzas taimera intervāls, notikums tiek pacelts un darbības komandas tiek izpildītas. Šajā gadījumā cmdlet komanda Get-Random ģenerē nejaušu skaitli no 0 līdz 100 un saglabā to $Randomvariable.

Ja komandā Register-ObjectEvent izmantojat parametru Action, komanda atgriež PSEventJob objektu, kas attēlo darbību. Komanda saglabā darba objektu mainīgajā $Job.

Objekts PSEventJob, ko atgriež cmdlet komanda Register-ObjectEvent, ir pieejams arī notikuma abonenta rekvizītā Action. Papildinformāciju skatiet sadaļā Get-EventSubscriber.

Ceturtā komanda parāda, ka mainīgais $Job satur PSEventJob objektu. Piektā komanda izmanto cmdlet komandu Format-List, lai sarakstā parādītu visus objekta PSEventJob rekvizītus.

PSEventJob ir rekvizīts Modulis, kas satur dinamiskā skripta moduli, kas īsteno darbību.

Sestā komanda iespējo taimeri.

Pārējās komandas izmanto izsaukuma operatoru (&), lai izsauktu komandu modulī un parādītu $Random mainīgā vērtību. Zvana operatoru var izmantot, lai izsauktu jebkuru moduļa komandu, ieskaitot komandas, kas netiek eksportētas. Šajā gadījumā komandas parāda nejaušo skaitli, kas tiek ģenerēts, kad notiek pagājušais notikums.

Papildinformāciju par moduļiem skatiet about_Modules.


Saistītās saites
    Tiešsaistes versija: http://go.microsoft.com/fwlink/?LinkId=821845
    Iegūt notikumu
    Jauns notikums
    Register-EngineEvent
    Reģistrēties-WmiEvent
    Noņemt notikumu
    Atcelt reģistrācijas notikumu
    Gaidīšanas pasākums

Visbeidzot, pievienojiet PS avota kodu:

Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzuAtbildi





Iepriekšējo:PowerShell metodes vienas rindiņas komentāriem, vairākrindu komentāriem un bloķēšanas komentāriem
Nākamo:PowerShell izmanto WebClient, lai lejupielādētu failus
Publicēts 26.04.2017 14:35:44 |
132432423432423
Publicēts 16.04.2019 17:14:12 |
2222222222222
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com