在 PowerShell 中執行帶引數的 exe 檔案

Migel Hewage Nimesha 2023年1月30日 2022年5月16日
  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.