🌿PowerShell 7 全方位升級指南:環境建置、AI 設定與現代語法
前言
這篇文章是我在學習 PowerShell 時整理的筆記,主要解答兩個最常見的新手問題:
[!NOTE] 關於本文的寫作方式 本文由 ( 我 ) 提供點子與架構,並由 AI 協助撰寫完成。我很誠實地告訴你吧!
- Windows 內建的 PowerShell 要怎麼更新?
- 有哪些常用指令我需要知道?
如果你跟我一樣剛開始學習 PowerShell,這篇文章會是很好的起點。
目錄
- 版本篇:5.1 vs 7.x 大對決
- 安裝篇:如何更新到 PowerShell 7
- 設定篇:在 Antigravity 與 VS Code 強制啟用 PowerShell 7
- 語法篇:PowerShell 7 的新玩具
- 指令篇:新手生存必備指令表
- 排版篇:管線與格式化輸出
- 觀念篇:PowerShell 的設計哲學
版本篇:5.1 vs 7.x 大對決
簡單來說:Windows 內建的那隻藍色的,基本上已經「停止進化」了。
不管是 Windows 10 還是 Windows 11,預設內建的都是 Windows PowerShell 5.1。微軟為了系統相容性(怕舊的 script 壞掉),不敢隨便動它。如果你想要強大的新功能,你必須自己「安裝」新版的 PowerShell 7(現在改名叫 PowerShell,沒有 Windows 字樣了,Logo 也是黑色的)。
⚔️ PowerShell 版本比較表
| 特性 | Windows PowerShell (舊版/內建) | PowerShell (新版/需安裝) |
|---|---|---|
| 版本號 | 5.1 (萬年不變) | 7.4 / 7.5 (持續更新) |
| 核心架構 | .NET Framework 4.x (舊技術) | .NET 8 / 9 (新技術,效能狂飆) |
| 作業系統 | 只限 Windows | Windows, Linux, macOS 通吃 |
| 圖示顏色 | 🟦 藍色 | ⬛ 黑色 (帥氣多了) |
| 定位 | 系統維護、向後相容 (Legacy) | 開發者工具、雲端自動化 (Modern) |
| 更新方式 | 跟隨 Windows Update (幾乎只修 Bug) | 手動下載或用指令更新 |
🧐 Win 10 跟 Win 11 有差嗎?
完全沒差。
它們內建的都是 5.1 版。所以你買了新電腦,打開 PowerShell 如果看到藍色的視窗,恭喜你,你正在駕駛一輛骨董車。雖然它還能跑,但很多新語法(比如三元運算子 ? : 或 ||)它是看不懂的。
這個視覺化作品採用了「無框架技術時光流逝(Frameless Tech-Lapse)」的設計理念: 五層展廳結構 (從下到上):
底層 - Windows 獨佔時代 (PowerShell 5.1, 2016) 第二層 - 開源革命 (PowerShell Core 6.0, 2016-2018) 第三層 - 跨平台成熟期 (PowerShell 7.0, 2018-2020) 第四層 - 性能與創新 (PowerShell 7.1-7.3, 2020-2023) 頂層 - 現代與未來 (PowerShell 7.4-7.5, 2024-2026)

安裝篇:如何更新到 PowerShell 7
我們不要去微軟網站點下載按鈕了,那不夠帥。既然你在學指令,我們就用微軟現在最強推的套件管理工具 Winget 來處理。
第一步:檢查你現在的版本
請在你的 PowerShell 視窗輸入以下指令(這是檢查環境變數的標準做法):
$PSVersionTable.PSVersion
如果出來是 Major: 5, Minor: 1,那就是舊版。
第二步:安裝/更新到最新的 PowerShell 7
我們使用 winget 指令,它可以幫你從微軟官方儲存庫抓最新版並安裝。請直接輸入:
winget install Microsoft.PowerShell
這個指令會發生什麼事?
- 它會去抓最新的穩定版 (Stable)。
- 安裝後,你的電腦裡會有兩個 PowerShell:
- 原本的藍色 (Windows PowerShell) → 繼續留著保平安。
- 新的黑色 (PowerShell 7) → 以後開發、練習都開這個。
[!TIP] Side-by-Side 部署 這在軟體架構上稱為並行部署。微軟為了符合 SOLID 原則中的「開閉原則 (Open/Closed Principle)」——對擴充開放,對修改封閉,所以不直接覆蓋舊版 5.1,而是讓你安裝全新的 7.x 版,這樣既不會把舊系統搞壞,又能讓你享受新效能。
設定篇:在 Antigravity 與 VS Code 強制啟用 PowerShell 7
身為一名追求極致效能的開發者,最令人煩躁的莫過於剛裝好嶄新的 IDE —— 像是 Google 最新推出的 Antigravity 或是經典的 VS Code,打開 Terminal 卻發現迎面而來的還是那個充滿「古早味」、基於 .NET Framework 4.8 的 Windows PowerShell (v5.1)。
明明我們已經安裝了跨平台、基於 .NET 8/9 的 PowerShell 7 (Core),為什麼編輯器總是視而不見?
這涉及到 Windows 的環境變數優先順序以及編輯器的預設行為。Antigravity 雖然是 Google 的黑科技,但它的介面設定邏輯與 VS Code 系出同源。大多數編輯器採用「慣例優於設定」(Convention over Configuration) 的原則,預設會抓取系統路徑中最穩定的 powershell.exe (Legacy)。要打破這個慣例,我們必須在設定檔中明確注入依賴,強制指定執行路徑。
實作步驟:修改 settings.json
我強烈建議直接操作 settings.json,這符合 Infrastructure as Code (IaC) 的精神——將環境設定程式碼化。
1. 開啟設定檔
在 Antigravity (或 VS Code) 中,按下 Ctrl + Shift + P 開啟命令面板,輸入 Open Settings (JSON)。
2. 注入設定程式碼
請在 JSON 物件中加入以下配置。這段程式碼做了兩件事:
- 定義 Profile: 明確宣告一個名為 "PowerShell 7" 的設定檔,並指定其絕對路徑。
- 設定預設值: 將編輯器的預設 Terminal 指向這個新定義的 Profile。
{
"terminal.integrated.profiles.windows": {
// [關鍵手段] 這裡我們故意用 "Windows PowerShell" 這個名字
// 這樣當 Agent 或任何舊插件試圖呼叫預設名稱時,實際上會被導向 v7
"Windows PowerShell": {
"path": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
"icon": "terminal-powershell",
"args": [
"-NoLogo"
]
},
// 為了以防萬一你需要真的舊版,我們幫舊版取個新名字備用
"Legacy PowerShell 5": {
"path": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"icon": "terminal-powershell"
}
},
// 將所有預設入口都指向這個被我們「魔改」過的設定檔
"terminal.integrated.defaultProfile.windows": "Windows PowerShell",
// 連自動化設定也指過去
"terminal.integrated.automationProfile.windows": {
"path": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
"args": [
"-NoLogo"
]
},
}
3. 進階觀念:為什麼需要 automationProfile?
你可能會問:「我不是已經改了 defaultProfile 嗎?為什麼 AI Agent 還是笨笨的?」
這在軟體架構中屬於 關注點分離 (Separation of Concerns) 的細節:
- Interactive Shell (互動式):這是給你用的,講究使用者體驗 (例如載入你的主題、歷史紀錄)。
- Automation Shell (自動化):這是給程式 (如 AI Agent、Task Runner) 用的。為了相容性,編輯器預設常會死守最舊的
powershell.exe。
所以,如果你希望 Antigravity 的 AI 助手能用 PowerShell 7 的強大語法幫你寫 script,你就必須明確設定 automationProfile。
[!CAUTION] 設定完必須「完全重啟」 改完
automationProfile後,單純關閉 Terminal 是不夠的。因為 AI Agent 的執行緒 (Process) 通常在 IDE 啟動時就載入了。請務必完全關閉並重新開啟 Antigravity 或 VS Code,讓它重新抓取新的 PowerShell 7 路徑,這樣你的 AI 助手才會變聰明喔!
4. 實戰驗證:AI Agent 的升級之路
這不是開玩笑,協助我撰寫這篇文章的 AI 助手本身就經歷了這個過程。
- 第一階段:我們只改了
defaultProfile,結果 AI 回報它還是在用 PowerShell 5.1。 - 第二階段:我們補上了
automationProfile,但尚未重啟,AI 回報版本依然是 5.1。 - 第三階段:我們完全關閉並重啟了 IDE,AI 終於興奮地回報:「
Name: PSVersion, Value: 7.5.4」。
這證明了 automationProfile 是真的有效,且「重啟生效」是絕對的鐵律。現在,我的 AI 助手已經運行在最新的核心上了!
語法篇:PowerShell 7 的新玩具
既然升級到了 PowerShell 7,當然要來體驗一點 5.1 做不到的事情。以下是幾個最實用的新語法,讓你的腳本寫起來更像現代程式語言:
1️⃣ 三元運算子 (Ternary Operator)
寫過 C# 或 JavaScript 的人一定不陌生,以前在 5.1 我們要寫冗長的 if...else,現在一行搞定。
# 語法:<條件> ? <True時的值> : <False時的值>
$score = 85
$result = ($score -ge 60) ? "及格" : "不及格"
Write-Host $result # 輸出: 及格
2️⃣ 管線鏈結算子 (Pipeline Chain Operators)
這在 Linux Bash 中很常見,現在 PowerShell 也有了!它用來控制指令執行的「相依性」。
&&(AND):左邊成功 (Success),右邊才會執行。||(OR):左邊失敗 (Failure),右邊才會執行。
# 範例:先切換目錄,如果成功,就列出檔案
Set-Location "C:\MyProject" && Get-ChildItem
# 範例:嘗試連線伺服器,如果失敗,就發出警告
Test-Connection "192.168.1.1" -Count 1 || Write-Warning "伺服器掛了!"
3️⃣ 空值合併算子 (Null Coalescing Operator)
用來處理變數是 $null 的情況,給它一個預設值。
# 語法:<變數> ?? <預設值>
$myConfig = $null
$finalConfig = $myConfig ?? "DefaultSettings"
Write-Host $finalConfig # 輸出: DefaultSettings
這些現代語法能讓你的腳本更簡潔、邏輯更清晰。如果你把這些寫在舊版 5.1 裡,它會直接報錯給你看,這也是為什麼我們一定要升級環境的原因!
3. 關鍵細節解析
- 路徑跳脫 (Escaping): 許多開發者會直接複製檔案總管的路徑
C:\Program Files\...,這在 JSON 中會導致語法錯誤。必須寫成C:\\Program Files\\...。 - Foreign Key 關聯:
defaultProfile.windows的值字串,必須與profiles.windows中的 Key 完全一致(本例為"PowerShell 7")。
驗收成果
存檔後,關閉目前的 Terminal 並重新開啟一個新的 (快捷鍵 Ctrl + )。輸入 $PSVersionTable` 進行驗證。
若看到 PSEdition 顯示為 Core,且 PSVersion 為 7.x.x,恭喜你!你的開發環境已經成功脫離了舊時代的束縛。
指令篇:新手生存必備指令表
PowerShell 為了照顧從 Linux (Bash) 或 舊版 Windows (CMD) 轉過來的使用者,內建了很多「別名」(Alias)。你打的 ls 其實不是真的 ls,它背後的真名叫做 Get-ChildItem。PowerShell 的邏輯是「動詞-名詞」(Verb-Noun),雖然字多了點,但語意非常清楚。
你需要清空畫面的指令叫做 cls (來自 CMD) 或 clear (來自 Linux),它們的本尊是 Clear-Host。
📁 檔案與目錄操作 (生存基礎)
| 常用縮寫 (Alias) | 完整指令 (Cmdlet) | 功能說明 | 備註 |
|---|---|---|---|
| cls, clear | Clear-Host |
清除畫面 | 把雜亂的視窗清乾淨。 |
| ls, dir | Get-ChildItem |
列出檔案與資料夾 | 用來看看這裡有什麼。 |
| cd, chdir | Set-Location |
切換目錄 (資料夾) | 用來「瞬移」位置。 |
| pwd | Get-Location |
顯示目前位置 | 迷路時用,告訴你現在在哪個路徑下。 |
| mkdir, md | New-Item -Type Directory |
建立新資料夾 | 創造屬於你的新天地。 |
| cp, copy | Copy-Item |
複製檔案或資料夾 | Ctrl+C / Ctrl+V 的指令版。 |
| mv, move | Move-Item |
移動或重新命名 | 把檔案搬家,或是幫它改名。 |
| rm, del, erase | Remove-Item |
刪除檔案或資料夾 | ⚠️ 危險指令,刪了通常就不進資源回收桶囉,請小心使用! |
| cat, type | Get-Content |
查看檔案內容 | 直接在終端機把文字檔內容吐出來給你看。 |
| ni, touch(非內建) | New-Item |
建立新檔案 | 例如 ni test.txt 可以建一個空檔。 |
⚙️ 系統與程序 (進階一點點)
| 常用縮寫 (Alias) | 完整指令 (Cmdlet) | 功能說明 | 備註 |
|---|---|---|---|
| ps | Get-Process |
列出執行中的程序 | 看看電腦現在在忙什麼 (類似工作管理員)。 |
| kill | Stop-Process |
停止程序 | 強制關閉某個卡死的程式 (Process ID)。 |
| echo, write | Write-Output |
輸出文字到螢幕 | 通常用來顯示訊息或測試變數。 |
| man, help | Get-Help |
查詢說明書 | 這是最強指令!忘記怎麼用時,打 help ls 它就會教你。 |
| h, history | Get-History |
顯示歷史指令 | 忘記剛剛打了什麼神操作?用這查。 |
排版篇:管線與格式化輸出
預設的 PowerShell 輸出有時候真的像一碗大雜燴,資訊多到讓人不想看。要學會排版,你必須先學會 PowerShell 的靈魂——管線 (Pipeline),也就是那個直線符號 | (通常在鍵盤 Enter 鍵上方)。
它的概念是:把左邊指令的「產出」,丟給右邊指令去「處理」。 就像工廠流水線一樣,前面的負責生產資料,後面的負責包裝漂亮。
1️⃣ 整理成 Excel 表格風:Format-Table (縮寫 ft)
這是最常用的。當資料欄位不多,想要一目了然時使用。
ls | ft -AutoSize
-AutoSize 會自動調整欄寬,不會留一大堆空白,這招很實用!
2️⃣ 手機版詳細清單風:Format-List (縮寫 fl)
當一個物件的屬性超級多(例如一個 Process 有幾十種資訊),表格會被擠爆,這時候就要用 List 模式,它會把每一筆資料變成一張「卡片」。
ls | fl
你會看到檔案的詳細資訊,包括建立時間、最後寫入時間等,變成直式列表。查錯誤訊息或詳細設定時必用。
3️⃣ 只看我想要的:Select-Object (縮寫 select)
這不是排版,這是「過濾」。就像 SQL 的 SELECT 語法。很多時候畫面亂是因為雜訊太多,我們先把雜訊砍掉,畫面就乾淨了。
ls | select Name, Length
4️⃣ 幫我排順序:Sort-Object (縮寫 sort)
亂七八糟的資料怎麼看?當然要排序!
ls | sort Length # 由小排到大
ls | sort Length -Descending # 由大排到小
🎩 組合技示範:找出前 5 大檔案
軟體開發有個原則叫 Chain of Responsibility (責任鏈模式),PowerShell 的管線就是這個概念。我們來把它們串起來:
ls | sort Length -Descending | select Name, Length -First 5 | ft -AutoSize
白話文翻譯:
ls(列出檔案) → 丟給下一棒sort(依照長度由大排到小) → 丟給下一棒select(只取 Name 和 Length 欄位,且只拿前 5 筆) → 丟給下一棒ft(用表格自動調整寬度顯示出來)
💎 隱藏版神器:Out-GridView (縮寫 ogv)
如果你覺得打指令排版還是太累,微軟留了一手給 Windows 用戶。這個指令會彈出一個視窗化的表格,你可以直接用滑鼠點選排序、搜尋!
ps | ogv
試試看!它會把所有執行中的程式跳出一個視窗給你看,超級方便。
[!WARNING] 專業工程師的注意事項 在使用
Format-Table或Format-List時,請務必記住:Presentation Layer (表現層) 永遠要在最後面。這兩個指令會把原本好用的「資料物件 (Data Object)」轉變成「格式化物件 (Format Object)」。
- ❌ 錯誤示範:
ls | ft | sort Length(先變成表格圖形,再排序長度,這時候它已經認不得什麼是長度了)- ✅ 正確觀念: 先做完所有運算 (排序、過濾),最後一步才做排版
觀念篇:PowerShell 的設計哲學
PowerShell 的設計哲學是基於 物件 (Object) 的,這點跟 Linux 的純文字流 (Text Stream) 很不一樣。
舉例來說,當你執行 ls (即 Get-ChildItem) 時,它回傳的不是一堆文字,而是一堆「檔案物件」。
- 這意味著你可以對這些物件做「屬性存取」。
- 例如:
ls | Select-Object Name, Length(只列出檔名和大小)。
[!TIP] 給新手的忠告 千萬不要死記硬背!善用 Tab 鍵。在 PowerShell 裡打指令打到一半,按一下 Tab,它會自動幫你把指令或檔名補齊 (Auto-completion)。這才是工程師看起來打字很快的秘密。😏
- first edition time: 2026-02-06