如何在 PowerShell 中執行 CMD 命令
許多舊版命令提示字元(CMD)命令在 Windows PowerShell 腳本環境中運行。PowerShell 環境使用別名將這些命令從最常用的命令如 ping 到最具信息性的命令如 tracert 從舊環境中帶入。
然而,一些在命令提示字元終端中運行的命令在 Windows PowerShell 的腳本環境中將無法運行。本文將討論我們如何正確將它們轉錄到 Windows PowerShell。
使用 PowerShell 調用運算符 &
在多樣化的腳本世界中,PowerShell 以其能夠整合和執行來自其他腳本環境的命令(特別是命令提示字元(CMD))而脫穎而出。實現這一點的最直接方法之一是通過調用運算符(&)。
本文深入探討了在 PowerShell 中運行 CMD 命令時調用運算符的用法,這對於希望橋接 PowerShell 和傳統 CMD 腳本功能的人來說是一項非常寶貴的技能。
使用調用運算符的基本語法如下:
& <Command-String> <Arguments>
&:這是調用運算符。<Command-String>:這是你想執行的命令。可以是CMD命令、PowerShell cmdlet 或腳本塊。<Arguments>:這是可選的,表示命令所需的任何參數或參數。
示例代碼:
& cmd.exe /c echo "Hello from CMD"
在此腳本中,我們使用調用運算符 & 無縫執行 CMD 命令。首先,我們調用 cmd.exe,即命令提示字元的指定可執行文件,以確保我們在正確的命令行環境中工作。
然後我們向 cmd.exe 傳遞 /c 參數,這是一個關鍵指令,用於指示命令提示字元執行我們指定的命令並隨後迅速終止。我們選擇的命令 echo "Hello from CMD" 是一個簡單但有效的示範,因為它僅僅將訊息 Hello from CMD 打印到控制台。
輸出:

這個輸出顯示 CMD 命令 echo 在 PowerShell 中成功執行,顯示預期的訊息。
使用 cmd.exe 運行 CMD 命令
另一個運行 CMD 命令的示例是使用 cmd.exe。我們可以像以前的方法一樣在 Windows PowerShell 中添加 cmd.exe。
添加並執行後,它將在 Windows PowerShell 命令提示字元中調用命令行界面。
在 PowerShell 中直接使用 cmd.exe 的語法如下:
cmd.exe /c "<Command-String>"
cmd.exe:這是命令提示字元的可執行文件。/c:這是一個參數,用於指示cmd.exe執行由字符串指定的命令,然後終止。"<Command-String>":這是你希望執行的CMD命令或命令序列。
示例代碼:
cmd.exe /c "echo Hello from CMD"
在這個腳本中,我們通過使用 /c 參數直接調用 cmd.exe,將 CMD 功能無縫整合到 PowerShell 中,隨後是我們感興趣的命令 echo Hello from CMD。通過使用 cmd.exe /c,我們在 PowerShell 和 CMD 之間建立了一座橋樑,使我們能夠在 PowerShell 腳本中利用熟悉的命令行環境和 CMD 的功能。
命令 "echo Hello from CMD" 是這個整合的簡單但具體的示例,我們利用一個基本的 CMD 命令將我們希望的文本打印到控制台。
輸出:

這個輸出顯示了 CMD echo 命令在 PowerShell 中的成功執行,顯示消息 Hello from CMD。
使用 PowerShell 對 CMD 進行管道傳輸
在 Windows PowerShell 中,我們還可以通過將 cmd cmdlet 輸入到你想傳送的命令中,將命令發送到命令提示字元終端。
在 PowerShell 中對 CMD 進行管道傳輸主要用於在 PowerShell 上下文中執行 CMD 命令或批處理腳本。當你需要執行沒有直接 PowerShell 等效命令的 CMD 命令或處理舊版 CMD 腳本時,這種方法特別有用。
在 PowerShell 中向 CMD 管道傳輸的基本語法為:
"<Command-String>" | cmd.exe /c -
"<Command-String>":這是你希望執行的CMD命令。|:這是 PowerShell 管道運算符,將一個命令的輸出作為另一個命令的輸入。cmd.exe /c -:這會調用命令提示字元以執行通過管道傳遞給它的命令。-表示cmd.exe應該從標準輸入(stdin)讀取命令。
示例代碼:
"echo Hello from CMD" | cmd.exe
在這個示例中,我們使用管道技術將字符串 "echo Hello from CMD" 發送到 cmd.exe,展示了 PowerShell 的管道能力與 CMD 的命令執行的優雅結合。
我們的過程始於 "echo Hello from CMD",這是一個簡單而有效的 CMD 命令,封裝為一個字符串,設計在 CMD 環境中執行時顯示特定消息。
然後我們使用管道運算符 |,這是一個在 PowerShell 中的強大工具,將此命令字符串無縫地轉發到 cmd.exe。這一過程的最終結果在 cmd.exe /c - 中可見,其中 - 符號發揮了關鍵作用,指示 cmd.exe 應仔細讀取並執行來自管道的命令。
輸出:

這個輸出是 CMD echo 命令的結果,將 Hello from CMD 打印到螢幕上。
使用 Invoke-Expression 在 PowerShell 中運行 CMD 命令
在 PowerShell 中執行 CMD 命令的一種靈活且強大的方法是通過 Invoke-Expression cmdlet。當你需要動態構建和執行命令或腳本塊時,這種方法特別有用。
本文深入探討了在 PowerShell 中運行 CMD 命令時 Invoke-Expression 方法的目的、應用和用法。
Invoke-Expression 的語法為:
Invoke-Expression -Command "<Command-String>"
-Command:這指定要執行的命令。此參數可以縮寫為-C。"<Command-String>":這是包含要執行的命令的字符串。
示例代碼:
Invoke-Expression -Command "cmd.exe /c echo Hello from CMD"
在我們的腳本中,我們利用 Invoke-Expression 的強大功能巧妙地執行一個封裝在字符串中的 CMD 命令。過程始於 Invoke-Expression -Command,這是一個關鍵的 cmdlet 和參數組合,使 PowerShell 能夠解析並執行提供的命令字符串。
然後我們引入 "cmd.exe /c echo Hello from CMD" 作為我們選擇的命令字符串。這個字符串巧妙地指示 cmd.exe 使用 /c 參數,這一指令命令 CMD 執行後續命令然後總結其過程。
echo 命令位於這個字符串之中,是我們執行的核心,旨在在 CMD 中輸出 Hello from CMD。
輸出:

這個輸出是 echo 命令被 CMD 處理的直接結果,這是在 PowerShell 中通過 Invoke-Expression 被調用的。
結論
在這篇全面的探索中,我們深入研究了在 Windows PowerShell 環境中運行命令提示字元(CMD)命令的多樣性,涵蓋了四種不同的方法:直接的調用運算符 &,直接使用 cmd.exe,創新的將命令管道傳輸到 CMD 的技術,以及動態的 Invoke-Expression cmdlet。每種方法都有其獨特的優勢,將 CMD 的熟悉功能整合到 PowerShell 的高級腳本領域中。
對於希望進一步提升 PowerShell 專業知識的人來說,深入研究如創建自訂 PowerShell Cmdlets 或高級 PowerShell 腳本技術等高級主題是高度建議的,這將開啟通往更複雜和健壯的腳本解決方案的大門,這些解決方案和諧地融合了 PowerShell 和 CMD 的優勢。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn