將PowerShell從版本5.1升級到7,以解決谷歌gclient下載CIPD client時報錯的問題
用原始碼編譯Chromium或者PDFium時,需要下載谷歌depot_tools,然後執行gclient。
國內用gclient在下載CIPD client時很容易連不上伺服器,錯誤如下:
Downloading CIPD client for windows-amd64 from https://chrome-infra-packages.appspot.com/client?platform=windows-amd64&version=git_revision:8e9b0c80860d00dfe951f7ea37d74e210d376c13...
Failed to download the file, check your network connection, 使用“2”個引數呼叫“DownloadFile”時發生異常:“無法連線到遠端服
務器”
錯誤原因眾所周知。需要設定代理。老的帖子一般是介紹用netsh命令設定winhttp proxy,或者設定http_proxy、https_proxy環境變數,還有直接修改depot_tools\.cipd_impl.ps1中的PowerShell指令碼,增加呼叫WebClient庫時先設定代理的程式碼。
我在Win11上設定了winhttp proxy,也設定了http_proxy、https_proxy環境變數,依舊不靈光。研究了一下,發現Win11自帶的PowerShell版本是5.1,而根據微軟的文件,PowerShell 7對http_proxy、https_proxy環境變數的支援是沒問題的,那就把Windows自帶的PowerShell 5.1升級到7好了。
在微軟官網下載PowerShell 7的msi安裝包,裝好後,設定PATH=C:\Program Files\PowerShell\7;%PATH%。
PowerShell 5.1的主程式是powershell.exe,而PowerShell 7的主程式是pwsh.exe。所以需要修改一下指令碼depot_tools\.cipd_impl.ps1的內容,把其中呼叫powershell的地方(就一處),改為呼叫pwsh。
然後設定http_proxy、https_proxy環境變數:
set HTTP_PROXY=http://127.0.0.1:8118
set HTTPS_PROXY=http://127.0.0.1:8118
之後再執行gclient,就沒問題了。
參考:
微軟關於PowerShell的各個版本對HTTP_PROXY、HTTPS_PROXY環境變數的支援的說明:
https://docs.microsoft.com/en-us/powershell/azure/az-powershell-proxy?view=azps-7.3.2