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, prosim Odgovoriti
|