Marco Nie - powershell https://blog.niekun.net/tag/powershell/ macOS/Linux/windows设置终端 proxy 代理 https://blog.niekun.net/archives/97.html 2019-02-21T20:33:00+08:00 macOS/Linux通过设置代理来让终端流量走代理端口(socks5适用于大部分的流量,有些程序不走http),在终端输入:export all_proxy=socks5://127.0.0.1:1080 取消代理:unset all_proxy 也可以通过创建alias来设置一个“快捷命令”运行此命令:alias proxy='export all_proxy=socks5://127.0.0.1:1080' alias unproxy='unset all_proxy' 然后开启代理就输入:proxy 取消代理输入:unproxy 设置只对当前窗口有效,关闭后取消。可以通过bash文件保存alias,快速设置/取消proxy。打开 linux 打开 ~/.bash_profile, ~/.bashrc, 或者 ~/.profile,macOS 打开 ~/.zshrc。The difference between these files is (primarily) when they get read by the shell. If you're not sure where to put it, ~/.bashrc is a good choice.macos/Linux此文件一般不存在,可新建: vim ~/.bashrc # vim ~/.zshrc # macos将下面代码加入文件:alias proxy='export all_proxy=socks5://127.0.0.1:1080 && export http_proxy=http://127.0.0.1:1082 && export https_proxy=http://127.0.0.1:1082' alias unproxy='unset all_proxy && export http_proxy= && export https_proxy='保存文件后,重新载入配置: source ~/.bashrc # source ~/.zshrc. # macos运行命令测试alias是否生效:proxy 对于 macOS,默认的 shell 是 zsh,它的默认加载文件是 ~/.zshrc,所以将内容放入此文件内即可。windowsCMDcmd 中用 set http_proxy 设置set http_proxy=http://127.0.0.1:1082 set https_proxy=http://127.0.0.1:1082 恢复set http_proxy= set https_proxy= command prompt 使用 doskey 命令建立类似 alias 功能:新建 cmd_profile.bat 文件内容如下:@echo off doskey phttp = set http_proxy=http://127.0.0.1:1082 doskey phttps = set https_proxy=http://127.0.0.1:1082 doskey unphttp = set http_proxy= doskey unphttps = set https_proxy=打开注册表:win + r 输入 regedit,定位到 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\,右键 new - string value,重命名为:Autorun,值设置为 bat 文件路径:重新打开 cmd 输入 phttp phttps,查看当前IP:curl ipecho.net/plain ; echo 注意,如果默认终端是 powershell 则无法通过上述方式在注册表加载 bat 脚本,建议将脚本路径设置到系统 path 中,然后启动 CMD 后输入脚本文件名运行一次即可。power shellpower shell 稍微麻烦一下,需要建立 PowerShell profile 文件设置 alias。在启动 power shell 时会执行 profile 里的命令,类似与上面的 .bashrc 文件,关于建立 PowerShell profile 文件参考:https://docs.microsoft.com/en-us/previous-versions/system-center/service-manager-2010-sp1/ff461033(v=technet.10)?redirectedfrom=MSDN开始建立 profile,首先以管理员权限运行 power shell,执行以下命令:Test-path $profile 如果返回值为 false 执行以下命令,返回值为 true 跳过此步骤:New-item –type file –force $profile 打开 profile 文件:Notepad $profile 加入以下内容:# Set-Proxy command Function SetProxy() { Param( $Addr = $null, [switch]$ApplyToSystem ) $env:HTTP_PROXY = $Addr; $env:HTTPS_PROXY = $Addr; $env:http_proxy = $Addr; $env:https_proxy = $Addr; if ($addr -eq $null) { [Net.WebRequest]::DefaultWebProxy = New-Object Net.WebProxy; if ($ApplyToSystem) { SetSystemProxy $null; } Write-Output "Successful unset all proxy variable"; } else { [Net.WebRequest]::DefaultWebProxy = New-Object Net.WebProxy $Addr; if ($ApplyToSystem) { $matchedResult = ValidHttpProxyFormat $Addr; # Matched result: [URL Without Protocol][Input String] if (-not ($matchedResult -eq $null)) { SetSystemProxy $matchedResult.1; } } Write-Output "Successful set proxy as $Addr"; } } Function SetSystemProxy($Addr = $null) { Write-Output $Addr $proxyReg = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"; if ($Addr -eq $null) { Set-ItemProperty -Path $proxyReg -Name ProxyEnable -Value 0; return; } Set-ItemProperty -Path $proxyReg -Name ProxyServer -Value $Addr; Set-ItemProperty -Path $proxyReg -Name ProxyEnable -Value 1; } Function ValidHttpProxyFormat ($Addr) { $regex = "(?:https?:\/\/)(\w+(?:.\w+)*(?::\d+)?)"; $result = $Addr -match $regex; if ($result -eq $false) { throw [System.ArgumentException]"The input $Addr is not a valid HTTP proxy URI."; } return $Matches; } Set-Alias -Name set-proxy -Value SetProxy上面的脚本主要就是建立了三个 function:设置代理 设置系统代理 检查 uri 是否正确,然后设置 alias。关于 Set-Alias 语法参考:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-alias?view=powershell-7保存文件后,继续输入下面命令:Set-ExecutionPolicy RemoteSigned . $profile 以上就完成了 profile 的设置,使用语法如下:# 设置当前窗口代理 : set-proxy http://your-proxy:port #设置当前窗口代理 + 系统代理: set-proxy http://your-proxy:port -ApplyToSystem #取消当前窗口代理: set-proxy (没有参数) #取消当前窗口代理 + 系统代理: set-proxy -ApplyToSystem测试代理然后查看当前IP:set-proxy http://127.0.0.1:1082 curl https://info.niekun.net/ip ; echo