使用PowerShell脚本执行EXE文件


111

我正在尝试使用PowerShell脚本执行EXE文件。如果我使用命令行,它可以正常工作(首先我提供可执行文件的名称和一系列参数来调用它):

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

但是在脚本中执行完全相同的操作会返回错误:

术语 ' “C:\ Program Files文件\自动QA \ TestExecute 8 \ BIN \ TestExecute.exe” C:\ TEMP \ TestProject1 \ TestProject1.pjs /运行/退出/ SILENTMODE' 不被识别为cmdlet的名称,函数,脚本文件或可操作程序。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。

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

我该如何解决这个问题?


4
请发布您的代码。因为这就是问题所在,所以要进行查找比猜测容易得多。
科迪·格雷

Answers:


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

奇怪的是,原始问题中的命令几乎可以在PS2.0中的VM上为我工作。但是,该命令现在在PS4.0系统上失败。有趣的是,我也正在调用TestExecute。我想我最喜欢选项2,谢谢,谢谢!
EJA 2014年

33

看起来您在单个字符串中同时指定了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不会解释其他特殊字符)。


2
如果脚本和exe位于同一文件夹中,是否仍然可以在没有完整路径的情况下执行powershell脚本?还是可以使用相对路径?
guanome 2012年

7
如果exe位于同一文件夹中,则可以执行此操作.\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:\"
larkee 2014年

2

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

cd C:\ Users \ Administrators \ Downloads

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

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


正是我想要的!运行.exe文件和'\ aaa.exe。'
谢里夫Yazdian

2
  1. 克隆$ args
  2. 将您的参数推送到新数组中
  3. &$路径$ args

演示:

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

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

& $exepath $myArgs

Thx @nodoccat就像一个魅力一样,可以启动带有很长参数列表的docker命令。
danidemi

1

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

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

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


您好RichardE。您可以改善答案的格式吗?在编辑模式下,提供了格式化帮助,请看一下。
Dorian Turba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.