我正在尝试使用 PowerShell 脚本执行 EXE 文件。如果我使用命令行,它可以正常工作(首先我提供可执行文件的名称和一系列参数来调用它):
"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode
但是在脚本内部执行完全相同的操作会返回错误:
术语“C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe”C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode' 未被识别为 cmdlet、函数的名称、脚本文件或可运行的程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
(我使用“&”运算符调用了该命令。)
我该如何解决这个问题?
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode
或者
[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")
更新:对不起,我错过了“(我使用“&”运算符调用命令)”句子。我在动态评估路径时遇到了这个问题。尝试调用表达式构造:
Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"
看起来您在单个字符串中同时指定了 EXE 及其第一个参数,例如; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'
。这行不通。通常,您调用一个在其路径中有空格的本机命令,如下所示:
& "c:\some path with spaces\foo.exe" <arguments go here>
即 &
后面需要一个标识命令的字符串:cmdlet、函数、本机 exe 相对或绝对路径。
一旦你得到这个工作:
& "c:\some path with spaces\foo.exe"
根据需要开始引用参数。尽管看起来您的参数应该没问题(没有空格,PowerShell 没有其他特殊字符)。
.\foo.exe
,您还可以使用相对路径 ..\..\foo.exe
和带空格的相对路径 & '..\..\path with spaces\foo.exe'
。
cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\"
。
在 Powershell 中,cd 到 .exe 文件位置。例如:
cd C:\用户\管理员\下载
PS C:\Users\Administrators\Downloads> & '.\aaa.exe'
安装程序会弹出并按照屏幕上的说明进行操作。
克隆 $args 将您的 args 推送到新数组和 $path $args
演示:
$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()
$myArgs += '-p'
$myArgs += $env:NGINX_HOME
& $exepath $myArgs
不是开发人员,我找到了在一行中运行多个 ps 命令的解决方案。例如:
powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc
通过在 & (与号)之前放置一个 " (双引号),它会执行可执行文件。在我发现的所有示例中都没有提到这一点。没有双引号,ps 提示将打开并等待输入。
以下是之前一些回复的变体。可以将以下任一选项添加到 Powershell 配置文件以满足您的需求。
使用别名
如果您只想运行某些东西而不破坏 $env:PATH
。
Set-Alias -Name docker -Value 'C:\Program Files\Docker\Docker\resources\bin\docker.exe'
使用函数
或者,如果您需要更多脚本。
function docker {
# below is a basic example - go crazy here
& 'C:\Program Files\Docker\Docker\resources\bin\docker.exe' @Args
}