|
|
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šome Atsakyti
|
Ankstesnis:"PowerShell" metodai, skirti vienos eilutės komentarams, kelių eilučių komentarams ir blokuoti komentarusKitą:"PowerShell" naudoja žiniatinklio klientą failams atsisiųsti
|