Thinkin Markdown

別再搞混了:Windows PowerShell 與 PowerShell 到底差在哪?

很多人會把 Windows PowerShell 和 PowerShell 當成同一個東西,但它們其實代表不同世代的 PowerShell

發佈時間 2026-06-10
閱讀時間 6 分鐘
主題 命令列
標籤
Windows PowerShellPowerShell

很多人在 Windows 上使用命令列工具時,會把「Windows PowerShell」和「PowerShell」混在一起講。

這件事看起來只是命名問題,但在實務上可能會造成不少誤會。

例如:你以為自己正在使用新版 PowerShell 7,結果其實是在 Windows PowerShell 5.1 裡執行腳本;或是你看到某篇教學寫 PowerShell,卻沒有說清楚它到底指的是哪一個版本。

所以,這篇文章要來整理清楚:

Windows PowerShell 和 PowerShell 到底差在哪?

先講結論

簡單來說:

Windows PowerShell 是舊版 PowerShell,主要指 Windows 內建的 Windows PowerShell 5.1

PowerShell 則是新版 PowerShell,通常指 PowerShell 7,它是跨平台、開源並基於現代 .NET 建置的版本。

最簡單的判斷方式是:

$PSVersionTable

如果看到版本是 5.1,通常就是 Windows PowerShell。

如果看到版本是 7.x,通常就是新版 PowerShell。

名稱上的差異

這兩個名稱很像,但其實有明確差別。

Windows PowerShell

Windows 系統長期內建的版本,常見版本是 5.1。

它的執行檔通常是:

powershell.exe

在 Windows 開始選單中看到的「Windows PowerShell」,通常就是它。

PowerShell

新版 PowerShell 從 PowerShell 6 開始轉向跨平台與開源路線,而現在大家常說的新版 PowerShell,通常是 PowerShell 7。

它的執行檔通常是:

pwsh.exe

在開始選單中通常會顯示為「PowerShell 7」。

差異比較表

項目Windows PowerShellPowerShell
常見版本5.17.x
執行檔powershell.exepwsh.exe
支援平台WindowsWindows、Linux、macOS
底層架構.NET Framework現代 .NET
是否開源否,主要是 Windows 內建元件
安裝方式Windows 內建通常需要另外安裝
發展狀態以相容性維護為主主要發展方向
適合情境舊系統、舊模組、Windows 專用管理新專案、跨平台、自動化腳本

最大差異:底層架構不同

Windows PowerShell 5.1 是建立在 .NET Framework 上。

PowerShell 7 則是建立在現代 .NET 上。

這件事很重要,因為 PowerShell 腳本有時會直接使用 .NET 類別或方法。當底層 .NET 不同時,某些腳本、模組或行為就可能出現差異。

也就是說:

💥 不是所有能在 Windows PowerShell 5.1 執行的腳本,都能百分之百無痛搬到 PowerShell 7。

💥 反過來也一樣,新版 PowerShell 裡可用的功能,也不一定能在 Windows PowerShell 5.1 使用。

PowerShell 7 不會取代 Windows PowerShell 5.1

這也是很多人容易誤會的地方。

在 Windows 上安裝 PowerShell 7 之後,它不會把 Windows PowerShell 5.1 覆蓋掉。

兩者其實可以並存。

所以如果你只是說「打開 PowerShell」,其實還不夠精準。最好明確說:

  • Windows PowerShell 5.1
  • PowerShell 7

這樣才不會讓別人搞錯環境。

模組相容性要注意

大多數常用模組已經可以在 PowerShell 7 使用,但仍然有一些舊模組或高度依賴 Windows / .NET Framework 的模組,可能還是需要在 Windows PowerShell 5.1 中執行。

💥 尤其是一些老舊的 Windows 管理腳本,過去可能是針對 Windows PowerShell 5.1 寫的。如果你把它們直接搬到 PowerShell 7,有可能遇到模組載入失敗、cmdlet 行為不同,或 .NET API 差異造成的問題。

因此,實務上比較保守的做法是:

✨ 如果是新專案,優先考慮 PowerShell 7。

🔍 如果是維護舊腳本,先確認它原本是在哪個版本上執行。

🔥 如果是 Windows 系統管理相關腳本,尤其是老舊環境,則要特別留意 Windows PowerShell 5.1 的相容性。

該用哪一個?

一般建議如下:

新專案:使用 PowerShell 7

如果你正在寫新的自動化腳本,或希望腳本能跨 Windows、Linux、macOS 執行,建議使用 PowerShell 7。

它是目前主要發展方向,也比較適合現代開發與部署環境。

舊專案:先確認原本環境

如果你接手的是舊腳本,不要急著直接丟到 PowerShell 7 執行。

先檢查原本使用的版本,再確認相關模組是否支援 PowerShell 7。

Windows 專用管理腳本:視情況使用 Windows PowerShell 5.1

如果腳本依賴舊版 Windows 管理模組,或在公司內部環境已經長期用 Windows PowerShell 5.1 執行,那就不要貿然升級。

建議先測試,再遷移。

補充:為什麼 UTF-8 腳本在 PowerShell 7 可以跑,但 Windows PowerShell 不行?

⚡ 還有一個很常見、但容易被忽略的差異:腳本檔案的文字編碼

💥 如果你的 .ps1 檔案是 UTF-8 no BOM,在 PowerShell 7 通常可以正常執行;但同一份檔案拿到 Windows PowerShell 5.1 執行時,卻可能失敗或出現亂碼。

原因是 PowerShell 7 預設使用 UTF-8 no BOM,但 Windows PowerShell 在讀取沒有 BOM 的腳本檔時,可能會把它誤判成系統傳統 ANSI Code Page。以繁體中文 Windows 環境來說,就可能被當成 Big5 之類的編碼來解讀。

只要腳本裡包含中文、特殊符號,或其他非 ASCII 字元,就可能因此解析錯誤。

例如:

UTF-8 no BOM
PowerShell 7:通常可以正常執行
Windows PowerShell 5.1:可能失敗或亂碼

UTF-8 with BOM
PowerShell 7:通常可以正常執行
Windows PowerShell 5.1:通常可以正常執行

這裡的 BOM,也就是 Byte Order Mark,可以把它理解成檔案開頭的一個編碼標記。它會明確告訴 Windows PowerShell:

這個檔案是 UTF-8,請不要用 ANSI 編碼去解讀。

所以,如果你的腳本需要同時相容 PowerShell 7 和 Windows PowerShell 5.1,而且內容包含中文或其他非 ASCII 字元,建議把 .ps1 存成:

UTF-8 with BOM

反過來說,如果你的腳本只會在 PowerShell 7 或跨平台環境執行,通常使用:

UTF-8 no BOM

會比較符合現代 PowerShell 的預設行為。

😅 這也是為什麼同一份腳本在 PowerShell 7 可以跑,但在 Windows PowerShell 5.1 不行;而你只要改成 UTF-8 with BOM,它就突然正常了。

不是腳本內容本身神秘地壞掉,而是 Windows PowerShell 一開始就用錯編碼讀它。

總結

你可以用這句話記住兩者差異:

Windows PowerShell 是舊版、Windows 專用、常見版本是 5.1;PowerShell 是新版、跨平台、通常指 PowerShell 7。

下次看到教學、文件或同事說「PowerShell」時,不妨多確認一句:

你指的是 Windows PowerShell 5.1,還是 PowerShell 7?

這個小小的確認,往往可以避免很多環境不一致造成的問題。

如果這篇文章對你有幫助,歡迎分享給更多人!

贊助支持

如果你喜歡我們的文章,或是這些內容對你有幫助,歡迎透過以下平台請我們喝杯咖啡,支持我們持續創作!

Ko-fi

作者

NE

Neil Tsai

樂於分享所見所聞所覺所知的全端工程師

留言功能需要 Cookie 授權

為了載入留言功能,我們需要您同意使用「功能性 Cookie」。您可以隨時在設定中調整。

推推,這 1 篇也值得你順手看完~

根據相同主題與共享標籤,幫你整理出最相關的延伸閱讀。

免責聲明

本網站對於任何使用或引用本網站網頁資料引致之損失或損害,概不負責。本網站亦有權隨時刪除、暫停或編輯本網站所登載之各項資料,以維護本網站之權益。除法律有強制規定外,在任何情況下,本網站對於 (1) 使用或無法使用本網站之各項服務;(2) 經由本網站取得訊息或進行交易;(3) 第三人在本網站上之陳述或作為;以及 (4) 其他與本網站服務有關之事項所致生之任何直接、間接、附帶、特別、懲罰性或衍生性損害,一概不負賠償責任。

CopyRight © 2026 Thinkin Markdown