Я только что завершил свой первый ночной сценарий сборки (на самом деле первый существенный сценарий что угодно) в powershell. Кажется, у меня все работает хорошо, если еще не надежно (я еще не занимался значительной проверкой ошибок), но я обнаружил, что попадаю в тупик вокруг командлета Invoke-Expression
, и мне интересно, использую ли я это правильно.
В частности, я использую ряд переменных для построения командных строк, которые я буду использовать для построения решения, а затем запускаю модульные тесты решения. например, что-то вроде:
$tmpDir = "C:\Users\<myuser>\Development\Autobuild"
$solutionPath=$tmpDir+"\MyProj\MyProj.sln"
$devenv="C:\Program Files (x86)\Microsoft Visual Studio 10.0\common7\ide\devenv"
$releaseProfile="Release"
$releaseCommandLine="`"$devenv`" `"$solutionPath`" /build `"$releaseProfile`""
Это работает достаточно хорошо, $releaseCommandLine
содержит командную строку, которую я хочу выполнить, когда я закончу. Затем я выполняю его через эту строку:
$output = Invoke-Expression "& $releaseCommandLine"
Это правильный способ выполнить командную строку, созданную вручную из сценария powershell? Сначала я думал, что Invoke-Command
сделает это, но я, должно быть, делал что-то не так, потому что я не мог заставить это работать в течение получаса, и я получил это почти сразу.
Я следовал этому же шаблону несколько раз в этом же сценарии. Это лучшая практика?