|
|
Publié sur 17/01/2017 17:05:59
|
|
|
|

J’utilise l’objet .net WebClient pour implémenter le téléchargement du fichier,
Et utilisez PowerShell pour vous abonner à l’événement DownloadProgressChanged,
J’ai mis à jour la barre de progression du téléchargement.
L’événement d’abonnement utilise Register-ObjectEvent de PowerShell, et le document d’introduction est le suivant :
Résumé S’abonne aux événements générés par un objet Microsoft .NET Framework.
grammaire Register-ObjectEvent [-InputObject] <PSObject> [-ÉvénementName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount<Int32>] [-MessageData<PSObject>] ] [-ÉvénementSoutien] [<CommonParameters>]
entrée Aucun Vous ne pouvez pas canaliser des objets vers Register-ObjectEvent .
Sortie System.Management.Automation.PSEventJob Ce cmdlet ne génère aucune sortie.
exégèse * Les événements, abonnements aux événements et la file d’attente d’événements n’existent que dans la session en cours. Si vous fermez la session en cours, la file d’attente d’événements est supprimée et l’abonnement à l’événement est annulé.
exemple Exemple 1 : Abonnez-vous aux événements lorsqu’un nouveau processus commence PS C :\>$Query = System.Management.WqlEventQuery « __InstanceCreationEvent », (TempsNouvelle-Objet 0,0,1), « TargetInstance isa 'Win32_Process' » PS C :\>$ProcessWatcher = Système Nouveau-Objet.Management.ManagementEventWatcher $Query PS C :\>Register-ObjectEvent -InputObject $ProcessWatcher -ÉvénementName « EventArrived »
Cet exemple s’abonne aux événements générés lorsqu’un nouveau processus commence.
La commande utilise l’objet ManagementEventWatcher pour obtenir les événements EventArrived. Un objet requête spécifie que les événements sont des événements de création d’instance pour la classe Win32_Process. Exemple 2 : Spécifier une action pour répondre à un événement PS C :\>$Query = System.Management.WqlEventQuery « __InstanceCreationEvent », (TempsNouvelle-Objet 0,0,1), « TargetInstance isa 'Win32_Process' » PS C :\>$ProcessWatcher = Système Nouveau-Objet.Management.ManagementEventWatcher $query PS C :\>$Action = { Nouveau-Événement « PowerShell.ProcessusCréé » -Émetteur $Sender -ArgumentsÉvénements$EventArgs.NouveauÉvénement.InstanceCible } PS C :\\>register-objectEvent -InputObject $ProcessWatcher -EventName « EventArrived » -Action $Action Nom d’identification : État hasMoreData Location Commande -- ---- ----- ----------- -------- ------- 2 422cFe5A-65E... Véritable nouvel événement « PowerShe...
Cet exemple montre comment spécifier une action pour répondre à un événement. Lorsque vous spécifiez une action, les événements qui sont lancés ne sont pas ajoutés à la file d’attente d’événements. Au lieu de cela, l’action répond à l’événement.
Dans cet exemple, lorsqu’un événement de création d’instance est lancé indiquant qu’un nouveau processus a été lancé, un nouvel événement ProcessCreated est lancé.
L’action utilise les variables automatiques $Sender et $EventArgs qui ne sont remplies que pour les actions d’événement.
La commande Register-ObjectEvent renvoie un objet de travail qui représente l’action, qui s’exécute en tant que tâche en arrière-plan. Vous pouvez utiliser les commandets Job, comme Obtenir-Emploi et Recevoir-Emploi, pour gérer la tâche en arrière-plan.
Pour plus d’informations, voir about_Jobs. Exemple 3 : S’abonner aux événements objet sur des ordinateurs distants PS C :\>$S = New-PSSession -Nomordinateur « Server01, Server02 » PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1 PS C :\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = System.Management.WqlEventQuery "__ InstanceCreationEvent », ' (Période Nouvel Objet 0,0,1), ' « TargetInstance isa 'Win32_Process' » $ProcessWatcher = Système-Nouvel Objet.Management.ManagementEventWatcher $Query $Identifier = « WMI. ProcessCreated » Register-ObjectEvent -Input $ProcessWatcher -EventName « EventArrived » ' -SourceIdentifier $Identifier -MessageData « Test » -Forward}EnableProcessCreationEvent
Cet exemple montre comment s’abonner aux événements objet sur des ordinateurs distants.
La première commande crée des PSSessions sur deux ordinateurs distants et les sauvegarde dans la variable $S.
La seconde commande utilise le paramètre FilePath du cmdlet Invoke-Command pour exécuter le script ProcessCreationEvent.ps1 dans chacun des PSSessions de $S.
Le script inclut une commande Register-ObjectEvent qui s’achève aux événements de création d’instance sur l’objet Win32_Process via l’objet ManagementEventWatcher et son EventArrived événement. Exemple 4 : Utilisez le module dynamique dans l’objet PSEventJob PS C :\>$Timer = Minuteurs de nouveaux objets. PS C :\>$Timer.Intervalle = 500 PS C :\>$Job = Register-ObjectEvent -InputObject $Timer -ÉvénementName Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PS C :\>$Job.gettype().nomfullSystème.Gestion.Automatisation.PSEventJob PS C : \>$Job | Format-List -Propriété * État : RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 MessageStatut : HasMoreData : Vrai Emplacement : Commande : $Random= Obtenir-Aléatoire -Min 0 -Max 100 JobStateInfo : Course Terminé : System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 1 Nom : Timer.Random ChildJobs : {}... PS : C :\>$Timer.Activé = $True PS C :\>& $Job.module {$Random}60 PS C :\>& $Job.module {$Random}47
Cet exemple montre comment utiliser le module dynamique dans l’objet PSEventJob qui est créé lorsque vous incluez une Action dans un enregistrement d’événement.
La première commande utilise le cmdlet Nouvel Objet pour créer un objet minuterie. La seconde commande règle l’intervalle du minuteur à 500 (millisecondes).
La troisième commande utilise le cmdlet Register-ObjectEvent pour enregistrer l’événement Elapsed de l’objet minuteur. La commande inclut une action qui gère l’événement. Chaque fois que l’intervalle de minuterie s’écoule, un événement est lancé et les commandes de l’action s’exécutent. Dans ce cas, le cmdlet Get-Random génère un nombre aléatoire entre 0 et 100 et le sauvegarde dans le $Randomvariable.
Lorsque vous utilisez un paramètre Action dans une commande Register-ObjectEvent, la commande renvoie un objet PSEventJob qui représente l’action. La commande sauvegarde l’objet job dans la variable $Job.
L’objet PSEventJob que le cmdlet Register-ObjectEvent renvoie est également disponible dans la propriété Action de l’abonné à l’événement. Pour plus d’informations, voir Get-EventSubscriber.
La quatrième commande montre que la variable $Job contient un objet PSEventJob. La cinquième commande utilise le cmdlet Format-List pour afficher toutes les propriétés de l’objet PSEventJob dans une liste.
Le PSEventJob possède une propriété Module qui contient un module script dynamique qui implémente l’action.
La sixième commande active le minuteur.
Les commandes restantes utilisent l’opérateur d’appel (&) pour invoquer la commande dans le module et afficher la valeur de la variable $Random. Vous pouvez utiliser l’opérateur d’appel pour invoquer n’importe quelle commande dans un module, y compris les commandes qui ne sont pas exportées. Dans ce cas, les commandes affichent le nombre aléatoire généré lorsque l’événement Elapsed se produit.
Pour plus d’informations sur les modules, voir about_Modules.
Liens associés Version en ligne : http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nouvel événement Register-EngineEvent Register-WmiEvent Retire-Event Désinscription de l’événement Événement d’attente Enfin, joignez le code source PS :
Touristes, si vous voulez voir le contenu caché de ce post, s’il vous plaît Répondre
|
Précédent:Méthodes PowerShell pour les commentaires à ligne unique, multilignes et commentaires à blocProchain:PowerShell utilise le WebClient pour télécharger des fichiers
|