Я использую объект .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:
Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйста Ответ
|