Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 10956|Atsakyti: 3

"PowerShell" iškviečia .net ir prenumeruoja įvykius [šaltinio kodas]

[Kopijuoti nuorodą]
Paskelbta 2017-01-17 17:05:59 | | | |


Aš naudoju .net WebClient objektą, kad įgyvendinčiau failo atsisiuntimą,

Ir naudokite "Powershell", kad užsiprenumeruotumėte "DownloadProgressChanged" įvykį,

Atnaujinta atsisiuntimo eigos juosta.

Prenumeratos įvykis naudoja "Powershell" Register-ObjectEvent, o įvadinis dokumentas yra toks:

Anotacija
    Prenumeruoja įvykius, kuriuos sugeneruoja Microsoft .NET Framework objektas.

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


Įvesties
    Nėra
    Negalite nukreipti objektų į Register-ObjectEvent .

Rezultatas
    System.Management.Automation.PSEventJob
    Šis cmdlet negeneruoja jokios išvesties.

Egzegezė
    * Įvykiai, renginių prenumeratos ir įvykių eilė egzistuoja tik dabartinėje sesijoje. Jei uždarysite dabartinį seansą, įvykių eilė bus atmesta, o renginio prenumerata atšaukiama.
   

pavyzdys
    1 pavyzdys: įvykių prenumerata, kai prasideda naujas procesas
    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"
   
    Šiame pavyzdyje prenumeruojami įvykiai, sugeneruoti prasidėjus naujam procesui.

Komanda naudoja objektą ManagementEventWatcher, kad gautų įvykius EventArrived. Užklausos objektas nurodo, kad įvykiai yra Win32_Process klasės egzemplioriaus kūrimo įvykiai.
    2 pavyzdys: nurodykite veiksmą, skirtą atsakyti į įvykį
    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 pavadinimo būsena HasMoreData vietos komanda
    --    ----            -----      -----------     --------             -------
    2 422cfe5a-65e... Tikras naujas renginys "PowerShe...
   
    Šiame pavyzdyje parodyta, kaip nurodyti veiksmą, skirtą atsakyti į įvykį. Kai nurodote veiksmą, iškelti įvykiai neįtraukiami į įvykių eilę. Vietoj to, veiksmas reaguoja į įvykį.

Šiame pavyzdyje, kai iškeliamas egzemplioriaus kūrimo įvykis, nurodantis, kad pradedamas naujas procesas, iškeliamas naujas įvykis ProcessCreated.

Veiksmas naudoja $Sender ir $EventArgs automatinius kintamuosius, kurie užpildomi tik įvykių veiksmams.

Komanda Register-ObjectEvent pateikia užduoties objektą, kuris nurodo veiksmą, kuris vykdomas kaip foninė užduotis. Norėdami valdyti foninę užduotį, galite naudoti Job cmdlet, pvz., Get-Job ir Receive-Job.

Daugiau informacijos rasite about_Jobs.
    3 pavyzdys: objektų įvykių prenumerata nuotoliniuose kompiuteriuose
    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", '
       (naujo objekto laiko intervalas 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
   
    Šiame pavyzdyje parodyta, kaip užsiprenumeruoti objektų įvykius nuotoliniuose kompiuteriuose.

Pirmoji komanda sukuria PSSessions dviejuose nuotoliniuose kompiuteriuose ir išsaugo juos $S kintamajame.

Antroji komanda naudoja Invoke-Command cmdlet parametrą FilePath, kad paleistų scenarijų ProcessCreationEvent.ps1 kiekviename iš $S esančių PSSessions.

Scenarijuje yra komanda Register-ObjectEvent, kuri prenumeruoja egzemplioriaus kūrimo įvykius Win32_Process objekte per objektą ManagementEventWatcher ir jo EventArrived renginį.
    4 pavyzdys: dinaminio modulio naudojimas objekte PSEventJob
    PS C:\>$Timer = Naujo objekto laikmačiai.laikmatis
    PS C:\>$Timer.Intervalas = 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 | Formatas-sąrašas -Nuosavybė *
    Valstybė :
    Bėgimo modulis: __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    Būsenos pranešimas:
    HasMoreData : Tiesa
    Vieta :
    Komanda: $Random= Get-random -min 0 -max 100
    JobStateInfo : Veikia
    Baigta: System.Threading.ManualResetEvent
    Egzemplioriaus ID: 88944290-133d-4b44-8752-f901bd8012e2
    Asmens kodas : 1
    Pavadinimas : Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Šiame pavyzdyje parodyta, kaip naudoti dinaminį modulį PSEventJob objekte, kuris sukuriamas įtraukus veiksmą į įvykio registraciją.

Pirmoji komanda naudoja cmdlet New-Object laikmačio objektui sukurti. Antroji komanda nustato laikmačio intervalą iki 500 (milisekundžių).

Trečioji komanda naudoja Register-ObjectEvent cmdlet, kad užregistruotų praėjusį laikmačio objekto įvykį. Komanda apima veiksmą, kuris tvarko įvykį. Pasibaigus laikmačio intervalui, įvykis iškeliamas ir vykdomos veiksmo komandos. Tokiu atveju "Get-Random" cmdlet sugeneruoja atsitiktinį skaičių nuo 0 iki 100 ir išsaugo jį $Randomvariable.

Kai naudojate veiksmo parametrą komandoje Register-ObjectEvent, komanda pateikia PSEventJob objektą, kuris nurodo veiksmą. Komanda įrašo užduoties objektą $Job kintamajame.

PSEventJob objektas, kurį grąžina cmdlet Register-ObjectEvent, taip pat pasiekiamas įvykio prenumeratoriaus ypatybėje Veiksmas. Daugiau informacijos rasite Get-EventSubscriber.

Ketvirtoji komanda rodo, kad $Job kintamajame yra PSEventJob objektas. Penktoji komanda naudoja cmdlet Format-List, kad sąraše būtų rodomos visos PSEventJob objekto ypatybės.

PSEventJob turi ypatybę Modulis, kurioje yra dinaminio scenarijaus modulis, kuris įgyvendina veiksmą.

Šeštoji komanda įjungia laikmatį.

Likusios komandos naudoja skambinimo operatorių (&), kad iškviestų komandą modulyje ir parodytų $Random kintamojo reikšmę. Galite naudoti skambinimo operatorių, norėdami iškviesti bet kurią modulio komandą, įskaitant neeksportuotas komandas. Tokiu atveju komandos rodo atsitiktinį skaičių, kuris generuojamas įvykus praėjusiam įvykiui.

Daugiau informacijos apie modulius rasite about_Modules.


Susijusios nuorodos
    Internetinė versija: http://go.microsoft.com/fwlink/?LinkId=821845
    Gauti renginį
    Naujas įvykis
    Register-EngineEvent
    Registruotis-WmiEvent
    Pašalinti įvykį
    Išregistruoti įvykį
    Laukimo įvykis

Galiausiai pridėkite PS šaltinio kodą:

Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašomeAtsakyti





Ankstesnis:"PowerShell" metodai, skirti vienos eilutės komentarams, kelių eilučių komentarams ir blokuoti komentarus
Kitą:"PowerShell" naudoja žiniatinklio klientą failams atsisiųsti
Paskelbta 2017-04-26 14:35:44 |
132432423432423
Paskelbta 2019-04-16 17:14:12 |
2222222222222
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com