在 PowerShell 中執行 CMD 命令

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月16日
  1. 使用 PowerShell 呼叫運算子 &
  2. 使用 cmd.exe 執行 CMD 命令
  3. 使用 PowerShell 管道連線到 CMD
在 PowerShell 中執行 CMD 命令

許多舊的命令提示符 (CMD) 命令在 Windows PowerShell 指令碼環境中工作。PowerShell 環境使用別名將這些命令從最常用的命令(如 ping)轉發到使用別名的遺留環境中的資訊最多的命令(如 tracert)。

但是,命令提示符終端中的某些正在執行的命令在 Windows PowerShell 的指令碼環境中不起作用。本文將討論如何將它們正確轉錄到 Windows PowerShell。

使用 PowerShell 呼叫運算子 &

當我們使用位於特定路徑的可執行檔案格式 (.exe) 執行命令列程式時,舊版 CMD 將成功執行,然後是實際命令。

如果我們採用下面的示例語法,如果我們在 CMD 中執行指令碼,我們可以使用 Avast 命令列掃描器執行快速掃描,它會成功執行。

示例程式碼:

"C:\Program Files\AVAST Software\Avast\ashCmd.exe" /Quick

但是,如果我們採用相同的語法並在 Windows PowerShell 中執行它,我們將得到一個異常錯誤。錯誤背後的原因是 Windows PowerShell 將雙引號 "" 視為文字字串值,並且語法中隨附的 /Quick 引數在任何本機庫中均不可用。

此外,在 Windows PowerShell 中僅執行帶引號的路徑將僅輸出字串值,而不是執行可執行檔案本身。

示例程式碼:

"C:\Program Files\AVAST Software\Avast\ashCmd.exe"

輸出:

C:\Program Files\AVAST Software\Avast\ashCmd.exe

為了解決這個問題,我們可以在命令列開頭呼叫 Invocation 運算子或 & 符號& 以在 Windows PowerShell 中正確執行可執行路徑。

& "C:\Program Files\AVAST Software\Avast\ashCmd.exe" /Quick

在 PowerShell 環境中使用呼叫運算子會將字串路徑視為可執行檔案的實際路徑。因此,它將使用隨附的命令引數直接執行指令碼。

使用 cmd.exe 執行 CMD 命令

執行 CMD 命令的另一個示例是使用 cmd.exe。我們可以像之前的方法一樣在 Windows PowerShell 中新增 cmd.exe

新增並執行後,它將呼叫 Windows PowerShell 命令提示符內的命令列介面。

cmd.exe /c where python

引數/c 將執行輸入的任何命令並終止 cmd.exe 命令列直譯器。

你可以執行以下語法來調出 cmd.exe 命令的幫助文件以獲取有關其他引數的更多資訊。此外,你可以在 PowerShell 和 CMD 命令列介面上執行以下命令。

cmd.exe /?

使用 PowerShell 管道連線到 CMD

在 Windows PowerShell 中,我們還可以通過將 cmd cmdlet 中的管道傳遞到你要傳送的命令來將命令傳送到命令提示符終端。

在下面的示例語法中,查詢本地計算機 IP 配置的請求被髮送到 CMD 命令列介面。執行程式碼後,CMD 終端被終止,使用者被帶回 PowerShell 終端,在行首用 PS 表示。

示例程式碼:

"Ipconfig /all" | cmd
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn