在 PowerShell 中运行带参数的 exe 文件

Migel Hewage Nimesha 2023年1月30日
  1. 在 PowerShell 中运行 exe 文件的方法
  2. PowerShell 中的调用运算符 (&)
在 PowerShell 中运行带参数的 exe 文件

exe 文件类型包含可以在 Windows 环境中执行的程序/应用程序。扩展名 EXE 是可执行文件的缩写形式。

当你双击 .exe 文件时,它将运行一些程序/应用程序。相同的 .exe 文件也可以通过 Windows PowerShell 执行。

本文只关注运行带参数的 exe 文件,因为如果它已经在 Windows PATH 中,则正常的 exe 文件执行(不带参数)非常简单。

在 PowerShell 中运行 exe 文件的方法

这里有两种情况需要解决。

  1. exe 文件路径已经在 WindowsPATH 中,并且命令名不包含任何空格。
  2. exe 文件路径不在 WindowsPATH 中,命令名或参数中包含空格。

对于第一种情况,调用带有参数/参数的 exe 文件非常简单。语法如下所示。

<abc.exe> [/parameter1 /parameter2...]
OR
<abc.exe> [-host "host.org" -u "username" -p "password"]
  1. abc.exe - 可执行文件名
  2. /parameter1 /parameter2 - 任何数量的参数都可以包含在 / 中并用空格分隔。
  3. -host "host.org" -u "username" -p "password" - 命名参数可以这样传递。

例子:

yourexecutable.exe /parameter1 /parameter2
OR
yourexecutable.exe -host "host.org" -u "username" -p "password"

同时,在第二种情况下,exe 文件路径不在 Windows PATH 中。因此,你应该明确给出 exe 文件/命令的完整路径。

如果路径包含空格,则必须将其括在引号内(如下所示)。

'C:\Program Files (x86)\Windows Media Player\wmplayer.exe'

当 PowerShell 看到这种以字符串开头的命令时,它会将命令评估为字符串并回显到命令窗口。

C:\Program Files (x86)\Windows Media Player\wmplayer.exe

这不是预期的输出。因此,要让 PowerShell 将此字符串解释为命令名称,你需要使用称为调用运算符 (&) 的特殊运算符。我们也称其为调用运算符。

PowerShell 中的调用运算符 (&)

呼叫运算符 (&) 可以添加到命令名称之前。它将使 PowerShell 将调用运算符 (&) 旁边的字符串解释为命令名称。

& 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe'

这将成功打开 Windows Media Player。

在 PowerShell 中使用调用运算符 (&) 传递参数

你可以使用调用运算符 (&) 轻松地将参数/参数传递给命令。

& 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe' "D:\music videos\video.mp4" /fullscreen

在上面的命令中:

  1. 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe' 是命令名称。
  2. "D:\videos\funny videos\ video.avi" 是传递给上述命令的第一个参数。
  3. /fullscreen - 传递给命令的另一个参数。

当你需要传递多个参数/参数时,有更简洁的方法来执行此类命令。

方法一:

将每个参数/参数分配给一个变量并重复使用,这样做更干净,也更容易维护。

$cmd = 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe'
$arg1 = 'D:\music videos\video.mp4'
& $cmd $arg1 /fullscreen

方法二:

还有另一种将参数/参数作为一个单元传递给命令的方法,称为 splatting。

$cmd = 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe'
$allargs = @('D:\music videos\video.mp4', 'anotherargument', 'nextargument')
& $cmd $allargs /fullscreen
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.