Назад | Перейти на главную страницу

Пакетный сценарий не запускается при вызове командлета Start-Process

У меня здесь странная проблема с Windows Server 2012 R2, которая для меня вообще не имеет никакого смысла.

У меня есть сценарий PowerShell, который в основном имеет следующую структуру:

Function Something-Different
{
    [...]
}

Function Start-Some-Batch
{
    Start-Process "K:\Path\To\Batch.cmd" 
}

Function Something-Else
{
    [...]
}

Something-Different
Start-Some-Batch
Something-Else

Однако командный файл K:\Path\To\Batch.cmd никогда не будет казнен!

Еще немного информации и фактов:

Что могло вызвать такое странное поведение? Здесь у меня заканчиваются идеи.

Вот что у меня работает при использовании Powershell v4.

PS C:\Scripts> Start-Process cmd -ArgumentList "/c 1.cmd" -WorkingDirectory c:\test4

куда 1.cmd живет в c:\test4

Лучшее решение, которое я нашел для этой проблемы, взято из примера Chocolatey для их Start-ChocolateyProcessAsAdmin метод.

$somePath = "C:\Path with Spaces" # Like $env:ProgramFiles
$batFile= "$someVar\myfile.bat"
Start-Process -ArgumentList "/c `'$batFile`'" -FilePath 'cmd.exe'

Обратите внимание, что это могут быть одинарные или двойные кавычки внутри -ArgumentList, их просто нужно экранировать, когда они находятся внутри других кавычек.

Это работает, потому что первый «проход», на котором PowerShell оценивает строку Start-Process, разрешит $ batFile до правильного значения, затем он передает /c 'C:\Path with Spaces\myfile.bat' к cmd.exe.