Aqui está o que funciona para mim, usando o Powershell v4.
PS C:\Scripts> Start-Process cmd -ArgumentList "/c 1.cmd" -WorkingDirectory c:\test4
Em que 1.cmd
reside em c:\test4
Eu tenho um problema estranho em um Windows Server 2012 R2 que simplesmente não faz o menor sentido para mim.
Eu tenho um script do PowerShell que basicamente tem a seguinte estrutura:
Function Something-Different
{
[...]
}
Function Start-Some-Batch
{
Start-Process "K:\Path\To\Batch.cmd"
}
Function Something-Else
{
[...]
}
Something-Different
Start-Some-Batch
Something-Else
No entanto, o arquivo de lote K:\Path\To\Batch.cmd
nunca é executado!
Mais algumas informações e fatos:
Start-Process "K:\Path\To\Batch.cmd"
diretamente de um console do PowerShell também não fornece nenhuma saída nem é acionada pelo script em lote $error[0]
está vazio após a execução Something-Else
está executando bem (o que significa que Start-Some-Batch
não está impedindo que o script PS termine sua execução) Security Settings
que vêm por meio da política de grupo O que poderia causar um comportamento tão estranho? Estou ficando sem ideias aqui.
Aqui está o que funciona para mim, usando o Powershell v4.
PS C:\Scripts> Start-Process cmd -ArgumentList "/c 1.cmd" -WorkingDirectory c:\test4
Em que 1.cmd
reside em c:\test4
A melhor solução encontrada para esse problema vem de um exemplo do Chocolatey para o método Start-ChocolateyProcessAsAdmin
.
$somePath = "C:\Path with Spaces" # Like $env:ProgramFiles
$batFile= "$someVar\myfile.bat"
Start-Process -ArgumentList "/c ''$batFile''" -FilePath 'cmd.exe'
Note que pode ser entre aspas simples ou duplas dentro do -ArgumentList
, elas só precisam de escape quando dentro de outras aspas.
Isso funciona porque a primeira "passagem" em que o PowerShell avalia a linha Start-Process resolverá o $ batFile para seu valor correto e, em seguida, passa o /c 'C:\Path with Spaces\myfile.bat'
para o cmd.exe
.