|
|
Publicerad på 2017-01-17 17:05:59
|
|
|
|

Jag använder .net WebClient-objektet för att implementera filnedladdningen,
Och använd PowerShell för att prenumerera på DownloadProgressChanged-eventet,
Uppdaterade nedladdnings-framstegsfältet.
Prenumerationshändelsen använder PowerShells Register-ObjectEvent, och introduktionsdokumentet är följande:
Sammanfattning Prenumererar på de händelser som genereras av ett Microsoft .NET Framework-objekt.
grammatik Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
inmatning Inga Du kan inte skicka objekt till Register-ObjectEvent .
Produktion System.Management.Automation.PSEventJob Denna cmdlet genererar ingen utdata.
exeges * Evenemang, evenemangsprenumerationer och händelsekön finns endast i den aktuella sessionen. Om du stänger den aktuella sessionen tas händelsekön bort och eventprenumerationen avslutas.
exempel Exempel 1: Prenumerera på händelser när en ny process startar 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"
Detta exempel prenumererar på händelser som genereras när en ny process startar.
Kommandot använder Objektet ManagementEventWatcher för att hämta EventArrived-händelser. Ett frågeobjekt specificerar att händelserna är instansskapande händelser för Win32_Process-klassen. Exempel 2: Specificera en åtgärd för att svara på en händelse PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = Ny-objekt 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-namn State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5A-65e... Att köra det sanna nya evenemanget "PowerShe...
Detta exempel visar hur man specificerar en handling som ska svara på en händelse. När du anger en åtgärd läggs inte händelser som höjs till i händelsekön. Istället svarar handlingen på händelsen.
I detta exempel, när en instansskapande händelse aktiveras som indikerar att en ny process har startats, väcks en ny ProcessCreated-händelse.
Åtgärden använder $Sender och $EventArgs automatiska variabler som endast fylls i för händelseåtgärder.
Kommandot Register-ObjectEvent returnerar ett jobbobjekt som representerar åtgärden, vilket körs som ett bakgrundsjobb. Du kan använda jobb-cmdlets, som Get-Job och Receive-Job, för att hantera bakgrundsjobbet.
För mer information, se about_Jobs. Exempel 3: Prenumerera på objekthändelser på fjärrdatorer 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", ' (Nytt-objektets tidsspann 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
Detta exempel visar hur man prenumererar på objekthändelser på fjärrdatorer.
Det första kommandot skapar PSSessions på två fjärrdatorer och sparar dem i $S variabeln.
Det andra kommandot använder parametern FilePath från Invoke-Command-cmdleten för att köra ProcessCreationEvent.ps1-skriptet i varje PSSession i $S.
Skriptet inkluderar ett Register-ObjectEvent-kommando som prenumererar på instansskapandehändelser på det Win32_Process objektet via ManagementEventWatcher-objektet och dess EventArrived händelse. Exempel 4: Använd den dynamiska modulen i PSEventJob-objektet PS C:\>$Timer = Nya objekt-timers.Timer PS C:\>$Timer.Interval = 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 | Format-List -Egenskap * Tillstånd: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMeddelande : HasMoreData: Sant Plats: Kommando: $Random= Get-Random -Min 0 -Max 100 JobStateInfo: Löper Färdigt: System.Threading.ManualResetEvent InstanceId: 88944290-133d-4b44-8752-f901bd8012e2 ID: 1 Namn: Timer. Slumpmässig ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Detta exempel visar hur man använder den dynamiska modulen i PSEventJob-objektet som skapas när du inkluderar en handling i en händelseregistrering.
Det första kommandot använder New-Object-cmdleten för att skapa ett timerobjekt. Det andra kommandot sätter timerns intervall till 500 (millisekunder).
Det tredje kommandot använder cmdleten Register-ObjectEvent för att registrera den förflutna händelsen för timerobjektet. Kommandot innehåller en handling som hanterar händelsen. När timerintervallet löper ut aktiveras en händelse och kommandona i handlingen körs. I detta fall genererar Get-Random-cmdleten ett slumpmässigt tal mellan 0 och 100 och sparar det i $Randomvariable.
När du använder en Action-parameter i ett Register-ObjectEvent-kommando, returnerar kommandot ett PSEventJob-objekt som representerar åtgärden. Kommandot sparar jobbobjektet i $Job variabeln.
PSEventJob-objektet som Register-ObjectEvent-cmdleten returnerar är också tillgängligt i Action-egenskapen hos händelseprenumeranten. För mer information, se Get-EventSubscriber.
Det fjärde kommandot visar att variabeln $Job innehåller ett PSEventJob-objekt. Det femte kommandot använder cmdleten Format-List för att visa alla egenskaper hos PSEventJob-objektet i en lista.
PSEventJob har en egenskap Modul som innehåller en dynamisk skriptmodul som implementerar åtgärden.
Det sjätte kommandot aktiverar timern.
De återstående kommandona använder anropsoperatorn (&) för att anropa kommandot i modulen och visa värdet på $Random variabeln. Du kan använda anropsoperatorn för att anropa vilket kommando som helst i en modul, inklusive kommandon som inte exporteras. I detta fall visar kommandona det slumpmässiga tal som genereras när den förflutna händelsen inträffar.
För mer information om moduler, se about_Modules.
RelateradeLänkar Onlineversion: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Ny-Evenemang Register-EngineEvent Register-WmiEvent Flytta-Händelse Avregistrering-händelse Vänte-händelse Slutligen, bifoga PS-källkoden:
Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
|
Föregående:PowerShell-metoder för enradiga kommentarer, flerradiga kommentarer och blockkommentarerNästa:PowerShell använder WebClient för att ladda ner filer
|