|
|
Geplaatst op 17-01-2017 17:05:59
|
|
|
|

Ik gebruik het .net WebClient-object om het bestand te downloaden,
En gebruik PowerShell om je te abonneren op het DownloadProgressChanged-evenement,
De voortgangsbalk van de download bijgewerkt.
Het abonnementsevenement gebruikt PowerShell's Register-ObjectEvent, en het introductiedocument is als volgt:
Samenvatting Abonnert zich op de gebeurtenissen die worden gegenereerd door een Microsoft .NET Framework-object.
grammatica Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Actie] <ScriptBlock>] [-Doorsturen] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
invoer Geen enkele Je kunt objecten niet naar Register-ObjectEvent sturen.
Output System.Management.Automation.PSEventJob Deze cmdlet genereert geen output.
exegese * Evenementen, evenementabonnementen en de evenementenwachtrij bestaan alleen in de huidige sessie. Als je de huidige sessie sluit, wordt de eventwachtrij verwijderd en wordt het eventabonnement opgezegd.
voorbeeld Voorbeeld 1: Abonner je op gebeurtenissen wanneer een nieuw proces start 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"
Dit voorbeeld sluit aan bij gebeurtenissen die worden gegenereerd wanneer een nieuw proces begint.
Het commando gebruikt het object: ManagementEventWatcher om EventArrived events op te halen. Een queryobject specificeert dat de gebeurtenissen instantiecreatie-events zijn voor de Win32_Process klasse. Voorbeeld 2: Specificeer een actie om op een gebeurtenis te reageren 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" -actie $Action Id-naam State HasMoreData Locatiecommando -- ---- ----- ----------- -------- ------- 2 422cfe5A-65E... Echt Nieuw Evenement "PowerShe...
Dit voorbeeld laat zien hoe je een actie specificeert om op een gebeurtenis te reageren. Wanneer je een actie specificeert, worden gebeurtenissen die worden verhoogd niet toegevoegd aan de gebeurteniswachtrij. In plaats daarvan reageert de actie op het voorval.
In dit voorbeeld, wanneer een instance creation-event wordt geactiveerd dat aangeeft dat een nieuw proces is gestart, wordt een nieuw ProcessCreated-event geactiveerd.
De actie gebruikt de $Sender en $EventArgs automatische variabelen die alleen worden ingevuld voor gebeurtenisacties.
Het Register-ObjectEvent-commando geeft een taakobject terug dat de actie vertegenwoordigt, en dat als achtergrondtaak wordt uitgevoerd. Je kunt de Job-cmdlets, zoals Get-Job en Receive-Job, gebruiken om de achtergrondjob te beheren.
Voor meer informatie, zie about_Jobs. Voorbeeld 3: Abonneer je op objectgebeurtenissen op externe computers 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", ' (Nieuw-Object TijdSpan 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
Dit voorbeeld laat zien hoe je je kunt abonneren op objectgebeurtenissen op externe computers.
Het eerste commando maakt PSSessions aan op twee externe computers en slaat deze op in de $S variabele.
Het tweede commando gebruikt de FilePath-parameter van de Invoke-Command cmdlet om het ProcessCreationEvent.ps1-script in elk van de PSSessions in $S uit te voeren.
Het script bevat een Register-ObjectEvent-commando dat zich abonneert op instantiecreatie-evenementen op het Win32_Process object via het ManagementEventWatcher-object en zijn EventArrived gebeurtenis. Voorbeeld 4: Gebruik de dynamische module in het PSEventJob-object PS C:\>$Timer = Nieuwe-Object 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 | Formaatlijst -Eigenschap * Staat: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusBericht : HasMoreData: Waar. Locatie: Commando : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : Running Voltooid : System.Threading.ManualResetEvent InstanceId: 88944290-133d-4b44-8752-f901bd8012e2 ID: 1 Naam: Timer. Willekeurig ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Dit voorbeeld laat zien hoe je de dynamische module in het PSEventJob-object kunt gebruiken dat wordt aangemaakt wanneer je een actie toevoegt aan een gebeurtenisregistratie.
Het eerste commando gebruikt de cmdlet New-Object om een timerobject te creëren. Het tweede commando stelt het interval van de timer in op 500 (milliseconden).
Het derde commando gebruikt de cmdlet Register-ObjectEvent om het verlopen evenement van het timerobject te registreren. Het commando bevat een actie die het evenement afhandelt. Telkens wanneer het timerinterval verstreken, wordt een gebeurtenis geactiveerd en worden de commando's in de actie uitgevoerd. In dit geval genereert de Get-Random cmdlet een willekeurig getal tussen 0 en 100 en slaat dit op in de $Randomvariable.
Wanneer je een Actie-parameter gebruikt in een Register-ObjectEvent-commando, geeft het commando een PSEventJob-object terug dat de actie vertegenwoordigt. Het commando slaat het taakobject op in de $Job variabele.
Het PSEventJob-object dat de Register-ObjectEvent-cmdlet teruggeeft, is ook beschikbaar in de eigenschap Action van de gebeurtenisabonnee. Voor meer informatie, zie Get-EventSubscriber.
Het vierde commando toont aan dat de variabele $Job een PSEventJob-object bevat. Het vijfde commando gebruikt de Format-List cmdlet om alle eigenschappen van het PSEventJob-object in een lijst weer te geven.
De PSEventJob heeft een Module-eigenschap die een dynamische scriptmodule bevat die de actie uitvoert.
Het zesde commando schakelt de timer in.
De overige commando's gebruiken de aanroepoperator (&) om het commando in de module aan te roepen en de waarde van de $Random variabele weer te geven. Je kunt de call operator gebruiken om elk commando in een module aan te roepen, inclusief commando's die niet geëxporteerd zijn. In dit geval tonen de commando's het willekeurige getal dat wordt gegenereerd wanneer het verstreken evenement plaatsvindt.
Voor meer informatie over modules, zie about_Modules.
Gerelateerde links Online versie: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nieuw Evenement Register-EngineEvent Register-WmiEvent Verwijder-Gebeurtenis Unregister-Event Wacht-Event Voeg tot slot de PS-broncode toe:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|
Vorig:PowerShell-methoden voor enkelregelige opmerkingen, meerregelige opmerkingen en blokopmerkingenVolgend:PowerShell gebruikt de WebClient om bestanden te downloaden
|