Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 10956|Svar: 3

PowerShell anropar .net och prenumererar på händelser [källkod]

[Kopiera länk]
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ällaSvar





Föregående:PowerShell-metoder för enradiga kommentarer, flerradiga kommentarer och blockkommentarer
Nästa:PowerShell använder WebClient för att ladda ner filer
Publicerad på 2017-04-26 14:35:44 |
132432423432423
Publicerad på 2019-04-16 17:14:12 |
2222222222222
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com