Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 10956|Відповідь: 3

PowerShell викликає .net і підписується на події [вихідний код]

[Копіювати посилання]
Опубліковано 17.01.2017 17:05:59 | | | |


Я використовую об'єкт .net WebClient для реалізації завантаження файлу,

І використовуйте powershell, щоб підписатися на подію DownloadProgressChanged,

Оновив індикатор прогресу завантаження.

Подія підписки використовує Register-ObjectEvent від powershell, а вступний документ виглядає так:

Анотація
    Підписується на події, які генеруються об'єктом Microsoft .NET Framework.

граматика
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action<ScriptBlock>] [-Forward] [-MaxTriggerCount <Int32>] [-MessageData] [-MessageData<PSObject>» ] [-SupportEvent ] [<CommonParameters>]


Вводу
    Немає
    Ви не можете конвейювати об'єкти в Register-ObjectEvent .

Результати
    System.Management.Automation.PSEventJob
    Цей cmdlet не генерує жодного виходу.

Екзегеза
    * Події, підписки на події та черга подій існують лише в поточній сесії. Якщо ви закриваєте поточну сесію, черга події скасовується, а підписка на подію скасовується.
   

приклад
    Приклад 1: Підписатися на події, коли починається новий процес
    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"
   
    Цей приклад підписується на події, що виникають при початку нового процесу.

Команда використовує об'єкт ManagementEventWatcher для отримання подій. Об'єкт запиту вказує, що ці події є подіями створення екземплярів для класу Win32_Process.
    Приклад 2: Вкажіть дію для реакції на подію
    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" -Дія $Action
    Id Name State HasMoreData Location Command
    --    ----            -----      -----------     --------             -------
    2 422cfe5a-65e... Запуск справжньої нової події «PowerShe...
   
    Цей приклад показує, як задати дію для реакції на подію. Коли ви вказуєте дію, події, які виникають, не додаються до черги подій. Натомість дія реагує на подію.

У цьому прикладі, коли виникає подія створення екземпляру, що означає запуск нового процесу, виникає нова подія ProcessCreated.

Дія використовує автоматичні змінні $Sender та $EventArgs, які заповнюються лише для дій подій.

Команда Register-ObjectEvent повертає об'єкт завдання, який представляє дію і виконується як фонове завдання. Ви можете використовувати команди Job, такі як Get-Job і Receive-Job, для керування фоновою роботою.

Для отримання додаткової інформації див. about_Jobs.
    Приклад 3: Підписка на об'єктні події на віддалених комп'ютерах
    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", '
       (Новий об'єкт TimeSpan 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
   
    Цей приклад показує, як підписуватися на об'єктні події на віддалених комп'ютерах.

Перша команда створює PSSessions на двох віддалених комп'ютерах і зберігає їх у змінній $S.

Друга команда використовує параметр FilePath cmdlet Invoke-Command для запуску скрипта ProcessCreationEvent.ps1 у кожному з PSSessions у $S.

Скрипт містить команду Register-ObjectEvent, яка підписується на події створення екземплярів на об'єкті Win32_Process через об'єкт ManagementEventWatcher та його EventArrived Подія.
    Приклад 4: Використовуйте динамічний модуль у об'єкті PSEventJob
    PS C:\>$Timer = таймери нових об'єктів. Таймер
    PS C:\>$Timer.Інтервал = 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
    P.S. C:\>$Job | Format-List -Властивість *
    Штат:
    Модуль запуску: __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusMessage:
    HasMoreData : Правда
    Розташування:
    Команда: $Random= Get-Random -min 0 -max 100
    JobStateInfo : Біг
    Завершено: System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    Id : 1
    Ім'я: Таймер. Випадково
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Цей приклад показує, як використовувати динамічний модуль в об'єкті PSEventJob, який створюється при включенні дії до реєстрації події.

Перша команда використовує cmdlet New-Object для створення об'єкта таймера. Друга команда встановлює інтервал таймера на 500 (мілісекунд).

Третя команда використовує cmdlet Register-ObjectEvent для реєстрації минулої події об'єкта таймера. Команда містить дію, яка обробляє подію. Щоразу, коли минає інтервал таймера, виникає подія, і команди в дії запускаються. У цьому випадку cmdlet Get-Random генерує випадкове число від 0 до 100 і зберігає його у $Randomvariable.

Коли ви використовуєте параметр Action у команді Register-ObjectEvent, команда повертає об'єкт PSEventJob, який представляє дію. Команда зберігає об'єкт завдання у змінній $Job.

Об'єкт PSEventJob, який повертає cmdlet Register-ObjectEvent, також доступний у властивості Action підписника події. Детальніше дивіться у розділі Get-EventSubscriber.

Четверта команда показує, що змінна $Job містить об'єкт PSEventJob. П'ята команда використовує cmdlet Format-List для відображення всіх властивостей об'єкта PSEventJob у списку.

PSEventJob має властивість Module, яка містить динамічний скрипт-модуль, що реалізує цю дію.

Шоста команда активує таймер.

Інші команди використовують оператор виклику (&) для виклику команди в модулі та відображення значення змінної $Random. Ви можете використовувати оператора виклику для виклику будь-якої команди в модулі, включаючи команди, які не експортуються. У цьому випадку команди показують випадкове число, яке генерується під час відбуваної події.

Для отримання додаткової інформації про модулі див. about_Modules.


Пов'язані посилання
    Онлайн-версія: http://go.microsoft.com/fwlink/?LinkId=821845
    Гет-Івент
    Нова подія
    Register-EngineEvent
    Register-WmiEvent
    Remove-Event
    Відреєстрація події
    Wait-Event

Нарешті, додайте вихідний код PS:

Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь





Попередній:Методи PowerShell для однорядкових, багаторядкових коментарів і блокованих коментарів
Наступний:PowerShell використовує WebClient для завантаження файлів
Опубліковано 26.04.2017 14:35:44 |
132432423432423
Опубліковано 16.04.2019 17:14:12 |
2222222222222
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com