Използвам .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>]
въвеждане Няма Не можете да pipe обекти към 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 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... Провеждане на истинското ново събитие "PowerShe..."
Този пример показва как да се специфицира действие, за да се реагира на събитие. Когато зададеш действие, събитията, които се повдигат, не се добавят към опашката на събитията. Вместо това действието реагира на събитието.
В този пример, когато се повдига събитие за създаване на инстанция, което означава, че е стартиран нов процес, се появява ново събитие ProcessCreated.
Действието използва автоматичните променливи $Sender и $EventArgs, които се попълват само за събития.
Командата Register-ObjectEvent връща обект на работа, който представлява действието, който се изпълнява като фонова задача. Можеш да използваш командванията за работа, като 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 PS C:\>$Job | Формат-Списък -Свойство * Щат: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMessage: HasMoreData : Вярно е Местоположение: Команда: $Random= Get-Random -Мин 0 -Макс 100 JobStateInfo : Бягане Завършено: System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 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 за регистрация на Elapsed събитието на таймер обекта. Командата включва действие, което обработва събитието. Всеки път, когато изтече интервалът на таймера, се повишава събитие и командите в действието се изпълняват. В този случай Get-Random cmdlet генерира случайно число между 0 и 100 и го запазва в $Randomvariable.
Когато използвате параметър Action в команда Register-ObjectEvent, командата връща обект PSEventJob, който представя действието. Командата запазва обекта на задачата в променливата $Job.
Обектът PSEventJob, който командването 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 Remove-Събитие Unregister – Събитие Изчакване-събитие Накрая, прикачете изходния код на PS:
Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
|