解決 Windows Server 下載失敗!連線意外關閉與安全封鎖的兩大妙招

寫程式或設定伺服器的時候,最怕遇到那種沒頭沒尾的錯誤訊息。如果你在 Windows Server 上嘗試下載檔案,卻跳出要求已經中止,連接意外關閉這串字,先別急著抓狂!這通常是因為你的 Windows Server 預設停用了比較新的加密協定( TLS 1.2 或 TLS 1.3 ),而 GitHub 偏偏強制要求使用 TLS 1.2 以上,兩邊對不上話,連線自然就被狠狠拒絕了。

別擔心,我們在 PowerShell 裡手動強制開啟 TLS 1.2 ,就可以輕鬆搞定。

絕招一:強制開啟 TLS 1.2 下載法

請複製以下這段程式碼,整段直接貼進你的 PowerShell 視窗裡面執行:

PowerShell

# 1. 強制讓 PowerShell 使用 TLS 1.2 加密協定
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# 2. 重新嘗試下載安裝檔
Invoke-WebRequest -Uri "https://github.com/microsoft/go-sqlcmd/releases/latest/download/sqlcmd-windows-amd64.msi" -OutFile "$env:USERPROFILE\Downloads\sqlcmd.msi"

# 3. 執行安裝
Start-Process msiexec.exe -ArgumentList "/i `"$env:USERPROFILE\Downloads\sqlcmd.msi`"" -Wait

執行之後,畫面上應該會彈出上面的截圖。


絕招二:繞過 IE 增強式安全性封鎖

如果用了第一招還是失敗,甚至跳出討人厭的 Internet Explorer 紅色警告,那就代表你抓到幕後黑手了!這是 Windows Server 惡名昭彰的「 IE 增強式安全性設定( IE ESC )」在作怪。

因為 PowerShell 在下載檔案的時候,背後會偷偷調用 Internet Explorer 的核心元件,而 Server 的安全機制預設會把外面所有的網站( 包括 GitHub )通通鎖死,當成大魔王在防防禦。

既然系統的安全性指令一直擋路,我們就改用「 全指令、不調用 IE 網頁核心 」的方法來下載,直接繞過這個煩人的限制。

請在 PowerShell 中執行這段全新的指令:

PowerShell

# 1. 強制開啟 TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# 2. 使用微軟官方下載中心(保證存在的 x64 穩定版網址)
$webClient = New-Object System.Net.WebClient
$url = "https://go.microsoft.com/fwlink/?linkid=2142258"
$output = "$env:USERPROFILE\Downloads\MsSqlCmdLnUtils.msi"
$webClient.DownloadFile($url, $output)

# 3. 執行安裝
Start-Process msiexec.exe -ArgumentList "/i `"$output`"" -Wait

這次執行完之後,畫面就不會再跳出那些紅色的警告。它會非常低調、靜悄悄地下載完成,接著直接彈出 sqlcmd 的安裝視窗。你同樣只要動動手指,跟著點下一步完成安裝即可。

最後再次提醒,安裝完畢後,一樣要關掉並重新打開一個新的 PowerShell 或 cmd 視窗,系統的環境變數才會生效。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *