Como faço para que o Powershell execute um arquivo em lote e permaneça aberto?
-
08-06-2019 - |
Pergunta
Por exemplo;com o prompt de comando antigo seria:
cmd.exe /k mybatchfile.bat
Solução
Entre em uma instância do cmd (ou mesmo no próprio PowerShell) e digite isto:
powershell -?
Você verá que powershell.exe possui um parâmetro "-noexit" que informa para não sair após executar um "comando de inicialização".
Outras dicas
Ao executar o PowerShell.exe, basta fornecer o -Sem saída mude assim:
PowerShell -NoExit -File "C:\SomeFolder\SomePowerShellScript.ps1"
PowerShell -NoExit -Command "Write-Host 'This window will stay open.'"
Ou se quiser executar um arquivo e depois executar um comando e manter a janela aberta, você pode fazer algo assim:
PowerShell -NoExit "& 'C:\SomeFolder\SomePowerShellScript.ps1'; Write-Host 'This window will stay open.'"
O -Comando parâmetro está implícito se não for fornecido, e aqui usamos o & para chamar o script do PowerShell e o ; separa os comandos do PowerShell.
Além disso, na parte inferior minha postagem no blog Eu mostro uma rápida alteração no registro que você pode fazer para que o PowerShell sempre permaneça aberto após a execução de um script/comando, para que você não precise fornecer explicitamente a opção -NoExit o tempo todo.
Tenho certeza que você já descobriu isso, mas acabei de postar
$CreateDate = (Get-Date -format 'yyyy-MM-dd hh-mm-ss')
$RemoteServerName ="server name"
$process = [WMICLASS]"\\$RemoteServerName\ROOT\CIMV2:win32_process"
$result = $process.Create("C:\path to a script\test.bat")
$result | out-file -file "C:\some path \Log-$CreatedDate.txt"