É possível obter o ID do processo de um executável iniciado em um script do PowerShell usando o operador 'Chamada' ('&')?

0

Aqui está o meu problema. Eu executo um aplicativo de linha de comando dentro de um script do PowerShell usando o operador de chamada (ou seja, o símbolo & ), de forma que seja:

& $PathToExe /switch:"lots of args" /anotherswitch:"with more parms" /etc:"$WithAlsoVariables"

Isso funciona bem, na verdade, um pouco bem demais. O processo é chamado, mas o script continuará enquanto o processo ainda estiver em execução. Na maioria das vezes, tudo bem, já que o resto do script não depende da saída deste processo, mas eu preciso limpar depois que o processo terminar.

Eu estava possivelmente olhando para o Start-Process CmdLet com o parâmetro -wait , o que, tenho certeza, faria o que eu preciso, mas também diminuiria um pouco as coisas. O EXE pode ser executado em paralelo, embora eu precise saber quando o processo foi concluído. Eu poderia executar um simples Do-While loop no final, verificando se o processo tinha terminado antes de limpar, mas eu não sei como obter o ID do processo específico para o EXE chamado. Não consigo verificar apenas o nome do processo, pois pode haver outros processos iniciados manualmente com o mesmo nome em execução.

Eu passei um tempo vasculhando algum site (como aqui), mas nada apareceu ainda. Ajuda seria bem vinda.

Eu tentei:

$proc = & $PathToExe /switch:"lots of args" /anotherswitch:"with more parms" /etc:"$WithAlsoVariables"

E, embora o processo comece, os argumentos agora estão incorretos, pois ele pára imediatamente

    
por Swinster 07.05.2016 / 04:12

1 resposta

1

Então, depois de alguns falsos inícios, como visto no comentário acima, achei que iria esclarecer a resposta que tenho (tenho certeza de que há outras maneiras de conseguir isso):

$ArgList = """/switch:""lots of args"" /anotherswitch:""with more parms" /etc:""$WithAlsoVariables"""
$proc = Start-Process $PathToExe -ArgumentList $ArgList -PassThrough
.
.
# The "-ErrorAction SilentlyContinue" parameter stops an error being thrown if the process has alread finished.
Wait-Process $proc.id -ErrorAction SilentlyContinue
# Clean up code
    
por 07.05.2016 / 17:36