вторник, 22 мая 2018 г.

Powershell waitforexit timeout


Powershell waitforexit timeout
Eu sou novo em Powershell e não tenho muito conhecimento em programação, apenas tentando usá-lo para empacotamento de software. De qualquer forma, eu descobri sobre o comando start-process com o parâmetro - Wait, e ele funciona muito bem para a maioria das coisas. O que eu notei é que não apenas espera pelo processo que você especifica, ele espera por qualquer subprocesso, mesmo depois que o processo principal não está mais sendo executado. Geralmente isso é bom, mas eu tenho uma situação estranha. Eu estou executando um arquivo de lote complexo do Oracle com o processo de início. O arquivo de lote, eventualmente, executa setup. exe, que é o que eu realmente quero esperar, mas outros processos gerados também nunca param. Portanto, se eu usar o parâmetro - wait, o script nunca será interrompido mesmo depois que o setup. exe não estiver mais em execução. O mais próximo que encontrei é usando isto:
Isso funciona, mas eu acho que haveria uma maneira melhor sem ter que usar um comando de tempo limite. Alguma ideia?

Processo de espera.
Neste artigo.
Descrição.
O cmdlet Wait-Process aguarda que um ou mais processos em execução sejam interrompidos antes de aceitar a entrada. No console do Windows PowerShell, esse cmdlet suprime o prompt de comando até que os processos sejam interrompidos. Você pode especificar um processo pelo nome do processo ou ID do processo (PID) ou canalizar um objeto de processo para Wait-Process.
O Wait-Process funciona apenas em processos em execução no computador local.
Exemplo 1: Pare um processo e aguarde.
Este exemplo interrompe o processo do Bloco de Notas e aguarda que o processo seja interrompido antes de continuar com o próximo comando.
O primeiro comando usa o cmdlet Get-Process para obter o ID do processo do Bloco de Notas. Ele armazena o ID na variável $ nid.
O segundo comando usa o cmdlet Stop-Process para interromper o processo com o ID armazenado em $ nid.
O terceiro comando usa o Wait-Process para aguardar até que o processo do Notepad seja interrompido. Ele usa o parâmetro Id do Wait-Process para identificar o processo.
Exemplo 2: especificando um processo.
Esses comandos mostram três métodos diferentes de especificação de um processo para Wait-Process. O primeiro comando obtém o processo do Bloco de Notas e o armazena na variável $ p.
O segundo comando usa o parâmetro Id, o terceiro comando usa o parâmetro Name e o quarto comando usa o parâmetro InputObject.
Esses comandos têm os mesmos resultados e podem ser usados ​​de forma intercambiável.
Exemplo 3: Aguarde os processos por um tempo especificado.
Esse comando aguarda 30 segundos para que os processos do Outlook e do Winword parem. Se ambos os processos não forem interrompidos, o cmdlet exibirá um erro de não finalização e o prompt de comando.
Parâmetros obrigatórios.
Especifica os IDs do processo dos processos. Para especificar vários IDs, use vírgulas para separar os IDs. Para localizar o PID de um processo, digite Get-Process.

Como iniciar um processo e esperar para completar? #PowerShell.
Como iniciar um processo e esperar que ele seja concluído? #PowerShell.
Um dos novos Cmdlets apresentados com o PowerShell v2 é chamado Start-Process. Ele inicia um processo no computador local e, opcionalmente, aguarda a conclusão se você usar o parâmetro de Comutação Wait do Cmdlet. Start-Process é implementado usando o método Start da classe System. Diagnostics. Process do NET Framework.
A primeira versão do Windows PowerShell não veio com um cmdlet como Start-Process. A função abaixo, também chamada de Start-Process, aguarda a conclusão do processo por padrão. Além disso, a função aguardará que todos os processos filho do processo sejam concluídos se você usar o parâmetro de opção WaitForChildProcesses. Além disso, a função não esperará infinitamente, pois suporta um parâmetro Timeout. Por padrão, ele aguardará 600 segundos para que um processo (e processos filho) seja concluído. Como o Start-Process de Posh v2, a função usa a classe System. Diagnostics. Process NET Framework.
Então, por que esperar por processos filhos? Se for importante aguardar a conclusão do processo, talvez esperar que seus processos filhos concluam também. Por exemplo, o instalador do Oracle chama o Java e termina enquanto o Java Runtime ainda está ocupado instalando o software.
Além disso, considero um tempo limite como obrigatório para evitar uma espera infinita devido a um processo de suspensão (ou processo filho).
BTW, é claro que você pode usar a função no PowerShell v2 também. Lembre-se de que a função tem duas vantagens: aguardar processos filhos e tempo limite!

Powershell waitforexit timeout
Eu quero capturar stdout e stderr de um processo que eu inicie em um script Powershell e exibi-lo de forma assíncrona para o console. Eu encontrei alguma documentação sobre isso através do MSDN e outros blogs.
Depois de criar e executar o exemplo abaixo, parece que não consigo exibir nenhuma saída de forma assíncrona. Toda a saída é exibida apenas quando o processo termina.
Neste exemplo, eu esperava ver a saída de "hi" na linha de comando antes do final da execução do programa, porque o evento OutputDataReceived deveria ter sido acionado.

Powershell waitforexit timeout
Eu tenho uma ferramenta que pode demorar muito tempo para executar, mais do que o tempo limite padrão do Powershell para iniciar o processo de 600 segundos. Então, estou tentando encontrar uma maneira de aumentar esse tempo limite. Se meu código de teste for executado assim sem um tempo limite especificado:
Em seguida, o script aguarda corretamente que o comando seja executado e saia:
PS U: \ Meus documentos \ Desenvolvimento \ PowerShell & gt; \ ping_test. ps1.
No entanto, se eu tentar adicionar um tempo limite ao comando:
O processo de ping ainda é iniciado, mas imediatamente retorna ao script do powershell e eu recebo esta saída:

Комментариев нет:

Отправить комментарий