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 .