WindowsDeveloperConfig:一行指令裝完 Windows 11 開發機,沒有 dry run、沒有 tag,外層腳本的信任只押在 HTTPS
README 副標寫著「Opinionated setups for Windows dev boxes. Idempotent. CI-tested.」,而同一個 repo 的 ci.yml 裡,push、pull_request、schedule 三種自動觸發全部關著,只剩手動的 workflow_dispatch。
兩句話都是官方寫的,我沒有要抓包。檔案裡的註解把原因講得很直白:repo 正在把 workload 從 winget configure 的 DSC 模型,搬到 PowerShell-native 的引擎,搬家期間自動化先停。這個細節放大來看,結論是:一行式安裝器最值得看的,是它沒給你什麼。 裝了哪些套件,README 列得清楚,沒什麼好爭的。沒給的那幾樣,才決定你敢把它跑在哪台機器上。
先把話說在前面:我沒有在任何 Windows 機器或 VM 上執行過這個專案的任何腳本,連 aka.ms 的網址都沒有請求過。這篇只讀了 microsoft/WindowsDeveloperConfig 的 README、workflow 註解和 GitHub API 的輸出,下面所有行為描述都是文件寫的,不是我看到的。
現況與用法
這個 repo 是微軟官方的 Windows 11 開發環境設定工具。截至 2026-11-03 我用 gh api 查到的狀態是:MIT 授權、沒有封存、2026-05-21 建立、3,491 顆星、242 個 fork、18 位貢獻者,最新一筆 commit 在當天 UTC 01:23。open issue 數 28,這個數字是 API 口徑,PR 也算在裡面。
用法就是一行:
1 | irm https://aka.ms/devconfig/standard/setup.ps1 | iex |
第一行是 Standard,第二行是 Full,指令原文都在 README。解除安裝也是一行,README 給的是 Standard 的版本:irm https://aka.ms/devconfig/standard/uninstall.ps1 | iex。aka.ms 被擋時有備用:改抓 raw.githubusercontent.com 上 main 分支的 setup-full.ps1。官方自己估的時間是乾淨機器加上好網路,大約 30 分鐘;系統需求寫得很硬,Windows 11,「Windows 10 is not supported」,完整套件約需 15 GB 空間。30 分鐘這個數字只有官方自述,我沒有任何第二來源。
中途會重開機
這段是我讀 README 時最意外的部分。步驟 4 是安裝 WSL,README 說這一步會警告你 10 秒,然後用 shutdown /r 直接重開。如果你的機器已經裝過 WSL,這一步會不會照樣重開,素材沒寫,我沒查。重開之後靠一個叫 WindowsDevConfigResume 的 Scheduled Task,在下次登入時接著跑。
它有煞車。README 寫「Only one restart is ever performed」,重開一次之後 WSL 還是不能用,腳本就停下來說明,不會一直重開。UAC 提示最多兩次。
照 README 的寫法,你按下 Enter 的那台機器,跑到安裝 WSL 那一步時會在 10 秒警告之後自己重開機。如果那台機器上還開著沒存的東西,這個警告就是你唯一的機會。我的讀法是,這種腳本預設機器上沒有別的東西在跑。 官方沒有這樣寫,這是我從重開機的做法反推的:它看起來不是為了「在日常用的筆電上順手升級一下」設計的,比較像是給新機、重灌後或 VM 用的。
它沒給你的四樣東西
Known limitations 那一節,官方自己列了兩條,原文是:「No package selection at run time: Full and Partial install all packages. There’s no -Skip switch or selection prompt.」以及「No dry run: There’s no -WhatIf.」
整理一下,加上我讀到的另外兩樣:
| 你可能會想要 | 實際情況 |
|---|---|
| 挑套件,只裝一部分 | 沒有 -Skip,也沒有選擇畫面 |
| 先預覽會改什麼 | 沒有 -WhatIf |
| 釘在某一版 | repo 沒有 Release,也沒有任何 tag(2026-11-03 查,兩者長度皆為 0) |
| 裝完乾淨還原 | uninstall 不會移除字型、VC++ runtime、WinGet、Windows optional features,也不會移除 %ProgramData%\CalmOS 這個安裝目錄 |
最後一列我多講兩句。腳本會把 bootstrap.ps1、dev-config.ps1、steps/、workloads/ 複製到 %ProgramData%\CalmOS,擁有者是 Administrators 與 SYSTEM,其他人唯讀。uninstall 會把 Tools 與 Settings 兩份清單移除,清單裡有 uv、NVM、Node.js、Python 3.14、Git、GitHub CLI、Oh My Posh、Azure CLI、.NET SDK 10、Intelligent Terminal、PowerToys、VS Code、PowerShell 7 這些,但安裝檔和 log 留著。
沒有 tag 這件事,要連著備用網址一起看。備用網址指向的是 main。主網址 aka.ms 最後導去哪裡,我沒有查,所以不敢說它也是 main;我能確定的只有:repo 沒有任何版本標記可以讓你說「我要 v1.2 那一版」。至少走備用網址的話,今天跑和下個月跑,拿到的是不同時間點的 main。
簽章這一層,README 講得很誠實
這個專案在安全上的說明,我覺得是我讀到的範圍裡寫得最坦白的部分。
正式發行要求有效的 Microsoft Corporation Authenticode 簽章;每次啟動會要求 process-scoped 的 RemoteSigned,而且不去改你機器上已儲存的 execution policy。README 也寫了不收集、不傳送 telemetry。
接著是那句我會直接引原文的話:「irm | iex does not verify the wrapper’s own signature; it trusts the HTTPS endpoint.」
翻成白話:你貼進 PowerShell 的那一行,會下載一支外層腳本並立刻執行,這支外層腳本本身的簽章,在這個流程裡沒有人驗。你信的是 HTTPS 另一頭是微軟,不是簽章。
我不認為這是缺陷,irm | iex 這種形態本來就是先跑再說。值得記的是官方沒有把這點藏起來;如果你把它理解成「微軟簽過章所以安全」,就少算了最外面那一層。
Standard 和 Full 的差別,有一處跟我的直覺相反
Full 多做的事情不只是多裝一批工具,README 列出三項是直接改系統行為:Remote Desktop 被打開(fDenyTSConnections 設成 0,不過 README 特別註明防火牆規則沒有開)、兩個 Edge 設定寫進 HKLM\SOFTWARE\Policies\Microsoft\Edge(所以 Edge 會顯示「managed by your organization」)、以及全域的 Do Not Disturb。
最後這項容易看漏。Do Not Disturb 出現在 README 末段 Full 的副作用清單裡,所以很容易以為只有 Full 會開;但 Standard 的 Windows settings 清單裡也有它。如果你選 Standard 是想要保守一點,所有 toast 通知會被關掉這件事,兩邊都一樣。
兩份 README、兩棵樹、一個過渡期
repo 的目錄結構有一個容易搞混的地方。根目錄那一份是 Authenticode 簽過章的發行版,由簽章 pipeline 重新產生,README 明講「don’t edit it directly」;真正的 source of truth 在 src/windows-dev-config/。所以你在根目錄看到的檔案,和開發時實際改的檔案,是兩份。
另外一個小差異,我只用 grep 查過:2026-11-03 在根目錄 README 搜 Azure CLI 與 Intelligent Terminal,沒有命中,src/windows-dev-config/ 底下那份有列。我沒有逐行讀完根目錄那份,它可能換了寫法,也可能真的沒列,所以我只說我沒搜到,不下結論。
過渡期的另一個跡象在 issue 區。截至 2026-11-03 有兩個 open issue 我覺得值得讀。#187(2026-11-02 建立)說 aka.ms/devconfig/wsl-comfort/setup.ps1 會被導到 Bing,所以 README 裡 WSL Comfort 那一行會失敗;#139(2026-10-03 建立)說 comfort-shell-bootstrap.sh 在不是 WSL 的單機 Ubuntu 上會失敗,雖然 README 寫的是支援任何 Ubuntu 主機。這兩條都是 issue 作者的說法,我沒有驗證過;我也沒有自己請求 aka.ms,所以 #187 現在還成不成立,我不知道。
這些加起來,我的讀法是它還在動:文件、簽章版、自動化、短網址分屬不同的檔案或服務,「一行就好」的承諾要靠它們同步才成立,而過渡期它們不一定同步。
我會怎麼用它
我的立場很簡單:這個腳本只拿來設定新機或 VM,不丟在已經在用的工作機上。
理由全來自前面幾節。沒有 -WhatIf,你在跑之前無法預覽它會動什麼;沒有 -Skip,你已經有的工具和它要裝的工具重疊時,沒有辦法挑;沒有 tag,你無法重現上個月那台機器的狀態;跑到安裝 WSL 那一步會在 10 秒後重開機,你無法保證手邊沒有未存的東西。這四件事裡任何一件,在一台全新的機器上都不是問題,因為本來就沒有東西可以被弄壞。
另外一個做法是,把 aka.ms 的那一行當成「入口」而不是「指令」:先把外層腳本載下來讀過,再決定要不要跑。我沒做過,這只是這種形態的安裝器補這個洞最直接的做法。
會讓我改變想法的條件有兩個。第一,repo 開始打 tag、出 Release,讓我可以釘版本,那「每次都拿到不同內容」這條風險就少了一半。第二,腳本加上 -WhatIf,哪怕只列出會安裝的套件與會改的設定,那我會願意把它拿到一台已經在用的機器上試。在這兩件事發生之前,3,491 顆星(2026-11-03 查)我也只當成人氣,不當成可以放心的理由。
一行指令省的是點滑鼠的時間,省不掉的是那個問題:改完之後退不退得回去。這支腳本現在給的答案是退不乾淨,所以它只配跑在可以整台丟掉的機器上。










