使用 PowerShell 脚本执行 EXE 文件

Posted

技术标签:

【中文标题】使用 PowerShell 脚本执行 EXE 文件【英文标题】:Executing an EXE file using a PowerShell script 【发布时间】:2011-06-06 02:37:47 【问题描述】:

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

"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 的名称, 函数、脚本文件或可操作 程序。检查拼写 名称,或者如果包含路径, 验证路径是否正确,并且 再试一次。

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

我该如何解决这个问题?

【问题讨论】:

请发布您的代码。既然这就是问题所在,看它比猜测容易得多。 【参考方案1】:
& "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,我会试一试,谢谢!【参考方案2】:

看起来您在单个字符串中同时指定了 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>

&amp; 后面需要一个标识命令的字符串:cmdlet、函数、本机 exe 相对路径或绝对路径。

一旦你得到这个工作:

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

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

【讨论】:

如果脚本和 exe 在同一个文件夹中,是否可以在没有完整路径的情况下执行 powershell 脚本?还是可以使用相对路径? 如果exe在同一个文件夹中,那么你可以这样做.\foo.exe,你也可以使用相对路径..\..\foo.exe和带有空格的相对路径&amp; '..\..\path with spaces\foo.exe' 当您的命令中有 管道 时,您应该使用引号:cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".【参考方案3】:

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

cd C:\Users\Administrators\Downloads

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

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

【讨论】:

正是我想要的!运行 .exe 文件 & '.\aaa.exe'【参考方案4】:
    克隆 $args 将 args 推入新数组 &$path $args

演示:

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

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

& $exepath $myArgs

【讨论】:

Thx @nodoccat,启动一个带有很长参数列表的 docker 命令就像一个魅力。【参考方案5】:

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

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

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

【讨论】:

嗨,RichardE。你能改进答案的格式吗?在编辑模式下,提供格式化帮助,看看吧。【参考方案6】:

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

【讨论】:

以上是关于使用 PowerShell 脚本执行 EXE 文件的主要内容,如果未能解决你的问题,请参考以下文章

在捆绑链执行结束时运行 PowerShell 脚本

如何运行PowerShell的脚本文件

一键帮你复制多个文件到多个机器——PowerShell小脚本(内附PS远程执行命令问题解析)

如何在PowerShell脚本中嵌入EXE文件

如何使用 C# 执行 PowerShell 脚本

Powershell脚本执行权限