Я використовую об'єкт .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:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
|