Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 10956|Resposta: 3

O PowerShell chama .net e assina eventos [código-fonte]

[Copiar link]
Publicado em 17/01/2017 17:05:59 | | | |


Eu uso o objeto .net WebClient para implementar o download do arquivo,

E use o PowerShell para assinar o evento DownloadProgressChanged,

Atualizei a barra de progresso do download.

O evento de assinatura usa o Register-ObjectEvent do powershell, e o documento de introdução é o seguinte:

Resumo
    Assina os eventos gerados por um objeto do Microsoft .NET Framework.

gramática
    Registrar-EventoObjecto [-ObjectoEntrada] <PSObject> [-NomeDeEvento] <String> [[-IdentificadorFonte<String>] ] [[-Ação] <ScriptBlock>] [-Encaminhar] [-ContagemDeGatilhoMáx<Int32>] [-MessageData<PSObject>] ] [-EventoDeSuporteT] [<CommonParameters>]


entrada
    Nenhum
    Você não pode canalizar objetos para Registrar-EventoObjecto.

Saída
    System.Management.Automation.PSEventJob
    Este cmdlet não gera nenhuma saída.

exegese
    * Eventos, assinaturas de eventos e a fila de eventos existem apenas na sessão atual. Se você fechar a sessão atual, a fila de eventos é descartada e a assinatura do evento é cancelada.
   

exemplo
    Exemplo 1: Assine eventos quando um novo processo começa
    PS C:\>$Query = System.Management.WqlEventQuery "__InstanceCreationEvent", (TimeSpan de Novo Objeto 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = Sistema de Novos Objetos.Management.ManagementEventWatcher $Query
    PS C:\>Registrar-ObjectoEvento -InputObject $ProcessWatcher -EventoNome "EventArrived"
   
    Este exemplo subscreve eventos gerados quando um novo processo começa.

O comando usa o objeto ManagementEventWatcher para obter eventos EventArrived. Um objeto de consulta especifica que os eventos são eventos de criação de instância para a classe Win32_Process.
    Exemplo 2: Especifique uma ação para responder a um evento
    PS C:\>$Query = System.Management.WqlEventQuery "__InstanceCreationEvent", (TimeSpan de Novo Objeto 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = Sistema de Novos Objetos.Management.ManagementEventWatcher $query
    PS C:\>$Action = { Novo-Evento "PowerShell.ProcessCreated" -Remetente $Sender -ArgumentosDeEvento $EventArgs.NovoEvento.InstânciaTargeta }
    PS C:\\>registre-objetoEvento -InputObject $ProcessWatcher -EventoNome "EventoChegado" -Ação $Action
    Comando Id Name State HasMoreData Location
    --    ----            -----      -----------     --------             -------
    2 422cFe5A-65E... Correndo o Evento Verdadeiro "PowerShe...
   
    Este exemplo mostra como especificar uma ação para responder a um evento. Quando você especifica uma ação, os eventos que são levantados não são adicionados à fila de eventos. Em vez disso, a ação responde ao evento.

Neste exemplo, quando um evento de criação de instância é levantado indicando que um novo processo foi iniciado, um novo evento ProcessCreated é gerado.

A ação utiliza as variáveis automáticas $Sender e $EventArgs que são preenchidas apenas para ações de eventos.

O comando Register-ObjectEvent retorna um objeto de trabalho que representa a ação, que roda como um job em segundo plano. Você pode usar os comandos de Trabalho, como Obtenha de Emprego e Recebe-Trabalho, para gerenciar o trabalho em segundo plano.

Para mais informações, veja about_Jobs.
    Exemplo 3: Assinar eventos de objetos em computadores remotos
    PS C:\>$S = New-PSSession -Nomecomputador "Servidor01, Servidor02"
    PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
    PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = System.New-Object.Management.WqlEventQuery "__ InstanceCreationEvent", '
       (Novo Espaço de Tempo 0,0,1), '
       "TargetInstance isa 'Win32_Process'" $ProcessWatcher = System-New-Object.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" '
       -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
   
    Este exemplo mostra como assinar eventos de objetos em computadores remotos.

O primeiro comando cria PSSessions em dois computadores remotos e os salva na variável $S.

O segundo comando usa o parâmetro FilePath do cmdlet Invoke-Command para executar o script ProcessCreationEvent.ps1 em cada um dos PSSessions em $S.

O script inclui um comando Register-ObjectEvent que assina eventos de criação de instâncias no objeto Win32_Process através do objeto ManagementEventWatcher e seu EventArrived evento.
    Exemplo 4: Use o módulo dinâmico no objeto PSEventJob
    PS C:\>$Timer = Temporizadores de Novos Objetos. Temporizador
    PS C:\>$Timer.Intervalo = 500
    PS C:\>$Job = Registrar-ObjetoEvento -InputObject $Timer -EventoNome Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100}
    PS C:\>$Job.gettype().nomefullSistema.Gerenciamento.Automação.PSEventTrabalho
    PS C:\>$Job | Format-List -Propriedade *
    Estado:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusMessage :
    HasMoreData : Verdade
    Localização:
    Comando : $Random= Obtendo-Aleatório -Min 0 -Max 100
    JobStateInfo : Em Corrida
    Finalizado: System.Threading.ManualResetEvent
    InstanceId : 88944290-133d-4b44-8752-f901bd8012e2
    ID: 1
    Nome: Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Ativado = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Este exemplo mostra como usar o módulo dinâmico no objeto PSEventJob que é criado quando você inclui uma Ação em um registro de evento.

O primeiro comando usa o cmdlet New-Object para criar um objeto temporizador. O segundo comando define o intervalo do temporizador para 500 (milissegundos).

O terceiro comando usa o cmdlet Register-ObjectEvent para registrar o evento Elapsed do objeto timer. O comando inclui uma ação que lida com o evento. Sempre que o intervalo do temporizador termina, um evento é aberto e os comandos da ação são executados. Nesse caso, o cmdlet Get-Random gera um número aleatório entre 0 e 100 e o salva no $Randomvariable.

Quando você usa um parâmetro de ação em um comando Register-ObjectEvent, o comando retorna um objeto PSEventJob que representa a ação. O comando salva o objeto de trabalho na variável $Job.

O objeto PSEventJob que o cmdlet Register-ObjectEvent retorna também está disponível na propriedade Action do assinante do evento. Para mais informações, veja Get-EventSubscriber.

O quarto comando mostra que a variável $Job contém um objeto PSEventJob. O quinto comando usa o cmdlet Format-List para exibir todas as propriedades do objeto PSEventJob em uma lista.

O PSEventJob possui uma propriedade Módulo que contém um módulo de script dinâmico que implementa a ação.

O sexto comando ativa o temporizador.

Os comandos restantes usam o operador de chamada (&) para invocar o comando no módulo e exibir o valor da variável $Random. Você pode usar o operador de chamada para invocar qualquer comando em um módulo, incluindo comandos que não são exportados. Nesse caso, os comandos mostram o número aleatório que está sendo gerado quando ocorre o evento Elapsed.

Para mais informações sobre módulos, veja about_Modules.


RelacionadosLinks
    Versão online: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Novo Evento
    EventoRegistrador-Motor
    Registrar-WmiEvent
    Remove-Event
    Desregistro-Evento
    Evento de Espera

Por fim, anexe o código-fonte do PS:

Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta





Anterior:Métodos PowerShell para comentários de linha única, comentários multilinha e comentários de bloco
Próximo:O PowerShell utiliza o WebClient para baixar arquivos
Publicado em 26/04/2017 14:35:44 |
132432423432423
Publicado em 16/04/2019 17:14:12 |
2222222222222
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com