Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11117|Répondre: 3

PowerShell appelle .net et s’abonne aux événements [code source]

[Copié le lien]
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îtRépondre





Précédent:Méthodes PowerShell pour les commentaires à ligne unique, multilignes et commentaires à bloc
Prochain:PowerShell utilise le WebClient pour télécharger des fichiers
Publié sur 26/04/2017 14:35:44 |
132432423432423
Publié sur 16/04/2019 17:14:12 |
2222222222222
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com