Я пытаюсь использовать Start-Process
в Powershell Core, используя переменную, чтобы указать, какой процесс нужно запустить. Я знаю, что dotnet
находится в моем PATH, поэтому это работает:
$DotnetRunCommandApp = 'run --project path/to/my/project.csproj'
Start-Process dotnet -ArgumentList $DotnetRunCommandApp
Однако, когда я пытаюсь переместить dotnet
в переменную, подобную этой:
$DotnetCommand = 'dotnet'
$DotnetRunCommandApp = 'run --project path/to/my/project.csproj'
Start-Process $DotnetCommand -ArgumentList $DotnetRunCommandApp
или даже используя абсолютный путь к dotnet
следующим образом:
$DotnetCommand = Resolve-Path ((Get-Command dotnet).Source | Out-String -NoNewline)
if (-not (Test-Path $DotnetCommand)) {
Write-Error "Can not find '$DotnetCommand'"
} else {
Write-Debug "Found $DotnetCommand" # Logs "DEBUG: Found C:\Program Files\dotnet\dotnet.exe"
}
$DotnetRunCommandApp = 'run --project path/to/my/project.csproj'
Start-Process $DotnetCommand -ArgumentList $DotnetRunCommandApp
Я получаю InvalidOperationException
:
This command cannot be run due to the error: The system cannot find the file specified.
Не уверен, почему Start-Process
не может найти файл, несмотря на то, что он do существует в моем PATH или даже когда я указываю командлету полный путь.
Моя конечная цель - указать параметры в объекте и просто передать этот объект в Start-Process
. Это часть скрипта pw sh, который запускается на моем агенте сборки для тестирования шаблона webjob. Хотя я хочу немного отличаться локально, см. Переключатель $Azure
ниже:
$StartProcessParams = @{
FilePath = $DotnetCommand
ArgumentList = $DotnetRunCommandApp
RedirectStandardError = (Resolve-Path $WebJobErrorLogFile)
RedirectStandardOutput = (Resolve-Path $WebJobLogFile)
PassThru = $true;
# Logging works best if we keep the process in the same "window" on Azure. Locally let the
# WebJob run in a new windows to make it really easy to kill the process in case of any errors
NoNewWindow = $Azure;
}
$WebJobProcess = Start-Process $StartProcessParams