Недавно я завершил свою первую ночную сборку script (первое значительное что-либо script, действительно) в 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 script? Сначала я думал, что Invoke-Command
сделает это, но я, должно быть, делал что-то неправильно, потому что я не мог получить эту работу вообще в течение получаса, и я почти сразу начал работать.
Я повторил этот же шаблон несколько раз в этом же script. Является ли это лучшей практикой?