|
|
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 favor Resposta
|
Anterior:Métodos PowerShell para comentários de linha única, comentários multilinha e comentários de blocoPróximo:O PowerShell utiliza o WebClient para baixar arquivos
|