Запуск EXE-файла с помощью PowerShell из каталога с пробелами в нем
Я пытаюсь запустить MSTest.exe из C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
, Более того, я беру все сборки в моем текущем каталоге и устанавливаю их как отдельные аргументы / testcontainer. Я не могу понять, как это сделать без жалоб PowerShell.
$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()
$MSTestCall = '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'
foreach($file in Get-ChildItem $CurrentDirectory)
{
if($file.name -match "\S+test\S?.dll$" )
{
$MSTestArguments += "/TestContainer:" + $file + " "
}
}
$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:\someDirectory\local64.testsettings"
Invoke-Expression "$MSTestCall $MSTestArguments"
Ошибка, которую я получаю из этого кода:
Выражение-выражение: Вы должны предоставить выражение значения в правой части оператора '/'.
Я не получаю эту ошибку, когда пытаюсь вызвать mstest.exe в каталоге без пробела в имени (дополнительные "не нужны").
Когда я пытаюсь использовать &
,
&$MSTestCall $MSTestArguments
Он передает $MSTestArguments в качестве единственного аргумента, который выбрасывает MSTest prompty. Предложения?
2 ответа
Я бы порекомендовал вам использовать массив параметров и оператор &
, Смотрите примеры в моем ответе здесь: Выполнение команды, хранящейся в переменной из Powershell
В этом случае код должен быть примерно таким:
$MSTestCall = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
$MSTestArguments = @('/resultsFile:out.trx', '/testsettings:C:\someDirectory\local64.testsettings')
foreach($file in Get-ChildItem $CurrentDirectory)
{
if($file.name -match "\S+test\S?.dll$" )
{
$MSTestArguments += "/TestContainer:" + $file
}
}
& $MSTestCall $MSTestArguments
Это работает?
$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@