使用PowerShell脚本执行EXE文件

时间:2011-01-09 15:09:57

标签: powershell powershell-v2.0

我正在尝试使用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的名称,   功能,脚本文件或可操作   程序。检查拼写   名称,或者如果包含路径,   验证路径是否正确   再试一次。

(我使用“&”运算符调用了命令。)

如何解决此问题?

6 个答案:

答案 0 :(得分:102)

& "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"

答案 1 :(得分:29)

看起来你在一个字符串中指定了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,function,native exe relative或absolute path。

一旦你完成了这项工作:

& "c:\some path with spaces\foo.exe"

根据需要开始引用参数。虽然看起来你的参数应该没问题(没有空格,也没有PowerShell解释的其他特殊字符)。

答案 2 :(得分:1)

不是开发人员,我找到了在一行中运行多个ps命令的解决方案。例如:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

通过在&(与号)之前放置一个“(双引号)来执行可执行文件。在所有示例中,我都没有提到。在没有双引号的情况下,ps提示打开并等待输入。

答案 3 :(得分:0)

在Powershell中,cd到.exe文件位置。例如:

cd C:\ Users \ Administrators \ Downloads

PS C:\ Users \ Administrators \ Downloads> &'。\ aaa.exe'

弹出安装程序,并按照屏幕上的说明进行操作。

答案 4 :(得分:0)

  1. 克隆$ args
  2. 将args推入新数组
  3. &$ path $ args

演示:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()

$myArgs += '-p'
$myArgs += $env:NGINX_HOME

& $exepath $myArgs

答案 5 :(得分:0)

这里是对之前的一些回复的一个变体。可以将以下任一选项添加到 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
}