在 Windows 上照著安裝教學做,然後卡住 —— 這件事的原因比你想像的集中。絕大多數情況落在同一組:
- 裝好了,但指令找不到 —— 這是 PATH 與路徑 的問題,不是安裝的問題
- 腳本被 PowerShell 擋住 —— 執行原則(execution policy)
- 安裝檔被 SmartScreen 或防毒軟體擋住 —— 通常跟「有沒有毒」無關
這篇把三件事分開講,每一件都給你一個可以確認它是不是這個原因的動作,而不是「試試看這些方法」。
不需要你會寫程式。你需要的只是會打開 PowerShell:按 Windows 鍵,輸入 PowerShell,Enter。
先分清兩件事:「裝好了」跟「打得開指令」
Windows 上,「安裝成功」跟「你能在視窗裡打出它的名字」是兩件獨立的事。
第二件事失敗時,畫面給你的訊息用的是第一件事的口氣 —— 它說「不認得這個指令」。於是九成的人得到的結論是「我沒裝好」,然後開始重裝。
重裝不會改變第二件事。 程式本來就在硬碟上,重裝只是再放一次,而電腦找不到它的原因(那份地址清單裡沒有它的資料夾)一次都沒有被動到。
所以在做任何事之前,先跑下面兩個步驟,把「到底裝沒裝」和「電腦找不找得到」分開確認。
步驟
步驟一:確認它到底裝進去沒有
Windows 的「安裝的應用程式」清單,底層是一個登錄機碼。Microsoft 的文件給的查法是直接讀它:
$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
Get-ChildItem -Path $UninstallPath |
ForEach-Object -Process { $_.GetValue('DisplayName') } |
Sort-Object
預期輸出:一長串按字母排序的程式名稱,例如 7-Zip 22.01 (x64)、Visual Studio Code。用眼睛掃,或在視窗裡按 Ctrl + F 找那個工具的名字。
這條清單的兩個限制,Microsoft 自己在文件裡寫明:
- 「沒有任何保證能找出系統上的每一個應用程式。」
- 「通常只是把檔案複製到電腦上某個資料夾的應用程式,沒辦法用這裡討論的方式管理。」
也就是說,清單上沒有,不等於沒裝。很多命令列工具(尤其是用一行指令裝的)就屬於「只是把檔案複製到某個資料夾」那一類。所以還要跑步驟二。
同一份文件也提醒不要用 Win32_Product 這個 WMI 類別去查:它沒有針對查詢最佳化,而且查詢過程會觸發已安裝套件的完整性檢查與修復,很慢,還可能在事件記錄裡留下錯誤。
步驟二:確認電腦找不找得到那個指令
Get-Command 程式名
或用 Windows 內建的 where(Microsoft 的說明是「顯示符合指定搜尋模式之檔案的位置」):
where.exe 程式名
程式名 換成你要找的東西,不要加 .exe,例如 Get-Command python。
有印出一個路徑(形如 C:\Users\你的帳號\AppData\Local\Programs\某工具\某工具.exe):程式在,而且 PATH 已經收錄它。這時候如果還報錯,問題不是 PATH,也不是沒裝 —— 往步驟四、五看。
完全沒有輸出、或報「找不到」:分成兩種可能,用一個動作分辨。拿步驟一或檔案總管看到的可能位置,直接指定目錄遞迴搜尋:
where.exe /r "$Env:LOCALAPPDATA\Programs" 程式名.exe
- 這次找到了 → 程式裝好了,只是它的資料夾不在
PATH上。去步驟三。 - 這次還是找不到 → 換
$Env:ProgramFiles再跑一次;兩處都沒有,才是真的沒裝成功。
順帶一提,where 有個 /q 參數,只回結束代碼(0 成功、1 失敗)不印清單,適合放進腳本。結束代碼是什麼,見 Exit Code(結束代碼)。
步驟三:搞懂 PATH,然後修它
Microsoft 對 PATH 的定義是:$Env:PATH 這個環境變數包含一份資料夾位置的清單,作業系統會在這些位置搜尋可執行檔。在 Windows 上,清單用分號 ; 分隔(macOS 與 Linux 用冒號 :)。
另有 PATHEXT,是 Windows 認定為可執行檔的副檔名清單。你打 python 而它去找 python.exe,靠的就是這個。
你現在就可以看自己的清單:
$Env:PATH -split ';'
關鍵的一件事:環境變數有三個範圍 —— 機器(系統)、使用者、處理程序。Microsoft 的文件明說:在 PowerShell 裡改環境變數,只會影響目前這個工作階段。
這直接解釋了新手最常撞的現象:你照教學改了 PATH,回到那個已經開著的視窗再試一次,還是找不到。因為那個視窗啟動時就把舊清單複製進去了。
修法:開一個全新的 PowerShell 視窗。 這是最便宜的一步,也是最多人在它上面浪費最多時間的一步。
只想在當前視窗暫時加一個資料夾(官方文件給的寫法):
$Env:PATH += ';C:\Tools'
注意開頭那個分號,它是「接在後面」的意思。
要永久生效,建議走圖形介面。Microsoft 文件列的路徑是:開啟系統控制台 → 選「系統」→ 選「進階系統設定」→ 切到「進階」索引標籤 → 按「環境變數...」→ 修改。Windows 11 的「設定」App 也有入口,確切的措辭與位置依 Windows 版本而異,找「環境變數」這四個字就對了。
改的時候守兩條:
- 改「使用者變數」裡的那一份,不要動「系統變數」。 使用者層不需要管理員權限,也不會影響這台電腦上的其他人。
- 只「編輯」那一行、在結尾加分號接上新資料夾。絕對不要整行貼上一份新的。 PATH 被蓋掉之後,一大票系統指令會一起失蹤,屆時連修它的工具都打不開。
步驟四:PowerShell 擋住腳本(執行原則)
症狀:你貼上一行安裝指令,它不跑,畫面說這個檔案「無法載入」、未經數位簽章,結尾有 UnauthorizedAccess 字樣。
這是什麼:執行原則是 PowerShell 的一項安全功能,控制它在什麼條件下載入設定檔與執行腳本。Microsoft 也明說它不是安全邊界,是縱深防禦的一層 —— 它的目的是防止你無意間違反自己定的規則。
先查現在是什麼:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
預期輸出:第一條印一個詞(例如 Restricted、RemoteSigned);第二條印一張表,列出五個範圍各自的設定。
如果五個範圍全是 Undefined,Microsoft 的說明是:Windows 用戶端上的有效原則就是 Restricted —— 允許單一命令,但不允許任何腳本。你的一行式安裝指令正是腳本。
改它(不需要管理員):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
這裡有個新手一定踩的坑:Set-ExecutionPolicy 的預設範圍是 LocalMachine,那會影響這台電腦上的所有人,而且 Microsoft 明說要用「以系統管理員身分執行」開 PowerShell 才改得動。所以網路上抄來的、沒寫 -Scope 的那一行,常常直接以存取被拒結束。加上 -Scope CurrentUser 就只改你自己,不需要提權。
RemoteSigned 的意思(官方定義):從網路下載的腳本與設定檔,需要受信任發行者的數位簽章;你在本機自己寫的、不是下載來的,不需要。
只想在這一個視窗放行,不留設定:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Process 範圍只影響目前這個工作階段,存進 $Env:PSExecutionPolicyPreference,視窗關掉就消失。
或者不改原則,只放行那一個檔案:
Unblock-File -Path .\install.ps1
Microsoft 的文件說明它內部做的事:移除 Zone.Identifier 這個替代資料流(alternate data stream),該資料流的值 3 代表「這個檔案是從網路下載的」。瀏覽器與郵件程式下載檔案時會加上這個標記。文件也特別列出不會加標記的幾種下載方式:curl.exe、Invoke-RestMethod、Invoke-WebRequest。
想知道某個資料夾裡哪些檔案被標記了:
Get-Item * -Stream "Zone.Identifier" -ErrorAction SilentlyContinue
Microsoft 對 Unblock-File 的提醒是原文寫在文件裡的:用它之前,先檢視檔案內容與來源,確認它安全。 這條提醒值得照做 —— 放行一個檔案的動作,比放行整個原則小得多,但也代表你對這一個檔案做了判斷。
改不動的情況:如果這台電腦屬於公司,群組原則(Group Policy)會蓋過你在本機設的任何原則。這時 Set-ExecutionPolicy 可能成功寫入、有效原則卻不變,畫面上會出現一段說明它被群組原則覆寫的訊息。找 IT,不要繼續試。
步驟五:SmartScreen 或防毒軟體擋住安裝檔
症狀:雙擊安裝檔,跳出一個全螢幕或大張的藍色/黃色警告,說 Windows 已保護你的電腦、這是個「未辨識的應用程式」,畫面上找不到明顯的「執行」按鈕。
這是什麼:Microsoft Defender SmartScreen 防的是釣魚與惡意網站、應用程式,以及潛在惡意檔案的下載。它判斷一個下載的應用程式是否可疑的方式,官方文件列了兩條:
- 比對下載的檔案與一份「已知惡意軟體網站與已知不安全程式」的清單,有符合就警告。
- 比對下載的檔案與一份「眾所周知、經常被下載」的檔案清單。檔案不在那份清單上,SmartScreen 就顯示警告,提醒你謹慎。
第二條是整篇最重要的一句。文件另一處把它講得更直接:如果某個 URL、檔案、應用程式或憑證已經建立信譽,使用者就不會看到任何警告;如果沒有信譽,該項目會被標記為較高風險並顯示警告。
所以:一個剛推出、下載人數還不多的工具,即使完全正常,也會被擋。 這個警告在講的是「我不認得它」,不是「它有毒」。
該怎麼辦,按這個順序:
-
先確認下載來源。 回到該工具的官方網站重新下載一次,而不是用搜尋結果第一頁的廣告、論壇轉貼的鏡像站、或某個「加速下載」的第三方連結。這一步不能省 —— SmartScreen 的警告確實偶爾是真的。
-
看它有沒有簽章、簽章是誰:
Get-AuthenticodeSignature -FilePath .\安裝檔.exe
Microsoft 的說明:這個 cmdlet 取得檔案的 Authenticode 簽章資訊;如果檔案未簽章,資訊會回傳但欄位是空白的。輸出裡看 Status 是不是 Valid、簽章者是不是你預期的那家公司。空白或不是 Valid,就把它當成真的警告,不要硬跑。
-
不要為了省事把 SmartScreen 或防毒軟體整個關掉。 你關掉的不是這一次警告,是之後每一次。
-
確定是誤報:可以把檔案送給 Microsoft 審。官方提交入口是
microsoft.com/wdsi/filesubmission,提交時要在產品選單裡選 Microsoft Defender SmartScreen。 -
安裝精靈跑到一半就消失、什麼都沒發生:這種無聲失敗常常是防毒軟體已經把檔案移進隔離區了。打開你的防毒軟體,找名稱類似「隔離區」「保護歷程記錄」「偵測記錄」的區塊(各家產品的措辭與位置都不同,本文不猜你的介面長什麼樣),確認它是不是把安裝檔移走了。如果是,從那裡還原並加入允許清單 —— 重跑一次安裝檔通常沒用,因為它會再被移走一次。
程式把檔案放在哪裡
Windows 用幾個環境變數當常用位置的捷徑。你可以直接在 PowerShell 裡把它們展開來看:
$Env:ProgramFiles
$Env:LOCALAPPDATA
最可靠的做法不是背這些位置,而是讓 Windows 告訴你。 步驟二的 where.exe 程式名 印出的就是執行檔的完整路徑,從那個路徑你立刻看得出來它裝在哪一層:
- 路徑在
C:\Program Files\...底下 → 全機安裝,裝的時候要過管理員同意 - 路徑在
C:\Users\你的帳號\AppData\Local\...底下 → 只裝給你這個使用者,不需要管理員
$Env:LOCALAPPDATA 展開後就是後者那個資料夾 —— 自己跑一次就能對上。
很多新的 AI 工具走第二條路,這是刻意的:只裝給當前使用者的程式不需要提權,也比較不會被群組原則擋。代價是它比較不會出現在「安裝的應用程式」清單裡,於是「我明明裝了怎麼找不到」就發生了。
還有一類程式根本不走安裝流程,只是把檔案複製到某個資料夾。Microsoft 的文件明說這類程式沒辦法用登錄機碼那套方式找到。這時候只有 where.exe /r 這種直接掃硬碟的方式找得到。
五個症狀,五個確認動作
| 你看到的 | 通常是 | 先做這一個動作 |
|---|---|---|
| 說不認得你輸入的那個指令名字 | 沒裝,或裝了但不在 PATH 上 | Get-Command 程式名 |
檔案無法載入、未經數位簽章、UnauthorizedAccess | PowerShell 執行原則 | Get-ExecutionPolicy -List |
| 藍色警告、未辨識的應用程式、找不到執行按鈕 | SmartScreen 信譽不足 | Get-AuthenticodeSignature -FilePath .\安裝檔.exe |
| 安裝精靈中途消失,之後完全找不到程式 | 防毒軟體已把檔案移進隔離區 | 開防毒軟體找隔離區/歷程記錄 |
| 改完 PATH、重跑一次還是找不到 | 你在舊視窗裡試,或你在另一個 shell 裡 | 開一個全新的 PowerShell 視窗 |
第一行的措辭要特別說明:CMD 與 PowerShell 的講法不一樣,不同 Windows 版本的講法也不一樣,但兩者都會重複你輸入的那個名字、並說自己不認得它。本文不逐字抄任何一個版本的原文 —— 你要認的是「它把我的指令名字回給我,說不認得」這個形狀。
一個最容易搞錯的地方:CMD 跟 PowerShell 不是同一個視窗
Windows 上有好幾種「黑底可以打字的視窗」,最常見的兩種是 CMD(命令提示字元)與 PowerShell。它們的語法不同:PowerShell 的指令是「動詞-名詞」形式(Get-Command),變數寫成 $Env:PATH;CMD 用 where、變數寫成 %PATH%。
分辨方式:PowerShell 的提示字元以 PS 開頭,後面通常跟著目前所在資料夾的完整路徑。
網路上很多 AI 工具的安裝指令是寫給 macOS/Linux 的 bash,也有很多是寫給 PowerShell 的。把 bash 指令貼進 PowerShell、或把 PowerShell 指令貼進 CMD,都會失敗,而且失敗訊息看起來很像「這工具壞了」。 本篇所有指令都是 PowerShell 的,請在 PowerShell 視窗裡跑。
判別與對照寫法在 Terminal、Shell、CLI:三個詞的差別 裡有一份。
下一步
- 用的其實不是 Windows:macOS 上安裝失敗:Gatekeeper、隔離標記與缺少建置工具
- 想有一套通用的判斷流程,不分作業系統:裝完沒反應:五個檢查,照順序做完再重裝
- 錯誤訊息到底該怎麼讀:怎麼讀一則錯誤訊息
- 那個視窗到底是什麼:Terminal 是什麼、檔案路徑是什麼
- 為什麼
command not found九成不是沒裝好:PATH 與路徑、環境變數與 .env