Wednesday, 10 May 2017

Waitforexit In Powershell


Normalmente, para comandos internos, o PowerShell aguarda antes de iniciar o próximo comando. Uma exceção a esta regra é o EXE baseado no subsistema Windows externo. O primeiro truque é o pipeline para Out-Null, assim: o PowerShell aguardará até que o processo Notepad. exe tenha sido encerrado antes de continuar. Isso é habilidoso, mas um pouco sutil de retirar da leitura do código. Você também pode usar Start-Process com o parâmetro - Wait: Se você estiver usando a versão PowerShell Community Extensions, é: Outra opção no PowerShell 2.0 é usar uma tarefa de fundo: ty ifree, eu obtive teste completo para executar dessa maneira que usei Citações simples em torno da lista de argumentos delimitados por espaço.1 mas agora echo exitcodefalse, o que não foi meu retorno do processo 1 exitCode Diagnostics. Process :: Start (quotc: Arquivos de Programas (x86) SmartBearTestComplete 10BinTestComplete. exequot, 39quotc: UsersMEDocumentsTestComplete 10 Projectshig4TestProject1hig4TestProject1. Pjsquot run project: myProjtest: quotKeywordTestszTdd1Goodquot exit39).WaitForExit (60) ndash AnneTheAgile Jan 21 15 às 14:15 Incluindo a opção - NoNewWindow me dá um erro: Start-Process. Este comando não pode ser executado devido ao erro: o acesso é negado. A única maneira de conseguir que funcionasse era chamar: Processos de Gerenciamento no PowerShell Várias pessoas perguntaram recentemente sobre como gerenciar processos no PowerShell. Este post do blog deve responder a uma série dessas questões. Como se poderia esperar da parte 8220shell8221 do PowerShell, você não precisa fazer nada especial para iniciar um processo. Em uma linguagem de programação como o VBScript, você precisa fazer algo bastante complexo como: strComputer 8220.8221 Set objWMIService GetObject (8220winmgmts: 8221 amp 8220 8221 amp amp. Amplificador de computador 8220rootcimv28221) Definir objStartup objWMIService. Get (8220Win32ProcessStartup8221) Definir objConfig objStartup. SpawnInstance Definir objProcess GetObject (8220winmgmts: rootcimv2: Win32Process8221) objProcess. Create 8220Notepad. exe8221, Null, objConfig, intProcessID, mas em shells (PowerShell, cmd. exe, bash, etc.), você pode simplesmente iniciar um programa como bloco de notas simplesmente digitando 8220notepad8221 como mostrado. Agora, você notará que quando você faz isso, o shell retorna imediatamente e solicita o próximo comando. Isso ocorre porque o bloco de notas é um processo Win32 GUI e é executado em segundo plano. Por outro lado, se você iniciar um aplicativo de console como o 8220ping. exe8221, o PowerShell aguardará até que esse processo seja concluído. Mas e se eu quiser aguardar o processo do Win32 Em cmd. exe, you8217d faça isso com o 8220start wait8221, mas esse comando não está (diretamente) disponível no PowerShell. Então, o que fazemos o PowerShell diretamente executa executáveis. Se aguarda a saída do processo, o código de saída deixado no LASTEXITCODE. Agora, se um executável Win32 for o último comando em uma pipeline e não for redirecionado, o processo será executado em segundo plano. No entanto, se você canalizar sua saída para algo, o PowerShell aguardará o comando para sair. Então, esta é uma espera simples (se não intuitiva) para aguardar a saída de um processo GUI. Alternativamente, se o processo já estiver sendo executado, você pode usar o Get-Process para obter as informações necessárias e, em seguida, fazer WaitForExit () nesse objeto. Aqui está um exemplo um pouco mais sofisticado onde abrimos um documento em vez de iniciar um processo. Desta vez, nós encontraremos o processo por título da janela em vez do nome do executável Infelizmente, procurar um processo sempre significa que você pode encontrar o processo errado. O ideal é que você goste de obter o objeto Processo diretamente. Portanto, para um gerenciamento de processos mais preciso, você terá que usar a classe System. Diagnostics. Process e iniciar os processos você mesmo. Por exemplo, você pode usar diagnostics. process :: Start () para aguardar um processo: observe o uso de 8220pwdfoo. txt8221 para especificar o caminho completo para o arquivo. Isso ocorre porque o PowerShell mantém sua própria idéia do diretório atual. (Esta nota se aplica ao uso de qualquer API que acessa o sistema de arquivos que você precisa para dar-lhe um caminho absoluto.) Agora, estamos começando a voltar ao nível de complexidade que você encontra em uma linguagem de programação. No entanto, você também possui todo o poder dessas linguagens. Aqui, um script de exemplo 8220background. ps18221 que permitirá que você execute um bloco de script separado em uma janela separada (ou na mesma janela se você especificar o parâmetro inconsole. Este script permite que você faça coisas no PowerShell que você pode fazer do cmd. exe, mas pode Faça do VBScript. Finalmente, aqui estão mais duas maneiras de trabalhar com os processos. Mesmo que o PowerShell doesn8217t tenha um comando de início, o cmd. exe o faz para que você possa começar a aguardar, e, por último, mas não menos importante, as Extensões da Comunidade do PowerShell incluem Um cmdlets Start-Process. Você pode obter uma lista desses recursos em: Bruce Payette MSFT

No comments:

Post a Comment