大量佈署軟體,我的固定套路是三步:先把舊版移乾淨 → 靜默安裝 → 確保新使用者登入時也拿得到。

Teams 汰換:最容易漏掉的一步

舊版 Teams 是「每個使用者各裝一份」,裝在使用者自己的 %LOCALAPPDATA%\Microsoft\Teams 底下;新版則是 Store 版。兩種要分別處理,只移其中一種不會生效。

最容易漏掉的是 Teams Machine-Wide Installer:它會在新使用者第一次登入時,自動幫他裝回舊版 Teams。如果沒把它一起移掉,你清了一輪,新進員工一登入,舊版又回來了。

靜默安裝的參數

  • winget:winget install --silent --accept-package-agreements --accept-source-agreements <套件>。要注意它在系統帳號(SYSTEM)環境下執行有限制,而且依賴 Microsoft Store;如果公司另外用 GPO 封鎖了 Store,兩邊會打架,部署前要先想清楚。
  • Inno Setup 打包的安裝程式:/SILENT(顯示進度條)、/VERYSILENT(完全不顯示)、/NORESTART、/DIR="路徑"。
  • NSIS 打包的安裝程式:參數不一樣,是 /S(大寫,靜默安裝)和 /D=路徑(必須放在最後、路徑不加引號)。先確認安裝程式是哪一種打包工具做的,參數用錯會直接跳出安裝畫面。
  • 自己做封裝:可以用安裝監控工具,比對安裝前後的檔案和登錄檔差異,再做成自訂的安裝包。

兩個常見的坑

  • 批次檔連續呼叫另一個批次檔要用 call:不然第一個跑完就不會回來了。另外,exit /b 0 只會結束目前這個批次檔,不會把呼叫它的那個也關掉。
  • PowerShell 腳本跑不起來:先查 Get-ExecutionPolicy -List。透過 GPO 部署時,用 powershell -ExecutionPolicy Bypass -File 腳本.ps1 單次放行,不要把整個網域的執行原則改成 Unrestricted。執行原則本來就不是嚴格的資安防線,但它能擋掉使用者誤點來路不明的腳本,整個打開就等於拆掉這道防呆。要注意:如果網域已經用 GPO 設定了執行原則,GPO 的優先順序比命令列高,-ExecutionPolicy Bypass 會沒有作用,這時要改用簽章過的腳本,或調整那條 GPO。

資料來源

  • 本人軟體佈署與批次腳本筆記(2025-02 起)

封面圖由 AI 生成。