Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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>]


въвеждане
    Няма
    Не можете да 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:

Туристи, ако искате да видите скритото съдържание на този пост, моляОтговор





Предишен:Методи на 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