Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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 <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 для получения событий EventArriveed. Объект запроса указывает, что события являются событиями создания экземпляра для класса 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 $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", '
       (Временное промежуток нового объекта 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 -Свойство *
    Штат:
    RunningModule : __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
    Там же: 1
    Имя: Таймер. Случайно
    ChildJobs : {}... PS C:\>$Timer.Включено = $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.

Когда вы используете параметр Действия в команде 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
    Get-Event
    Новое событие
    Register-EngineEvent
    Register-WmiEvent
    Удаление-Событие
    Unregister — событие
    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