当前位置: 首页 > news >正文

github访问加速项目@一键部署自动更改host修改加速Github访问

文章目录

    • abstract
    • powershell 版本的一键更新hosts文件
      • 更新Hosts
    • 操作步骤
      • 准备:设置powershell执行策略
      • powrshell脚本
      • 注册计划任务定期自动执行上述操作
      • 相关目录结构
    • 其他方法获取相关脚本
    • 一键运行整合脚本🤖🐽
    • 检查

abstract

  • 尽管这里实现了一键部署自动更新hosts的脚本,但是可用性仍然取决于原项目提供的hosts是否可用
  • 主要用来加速访问github网站,用来直接查看原github项目链接的,对于资源下载效果不大,这方面的需要可以用加速镜像来加速下载或克隆,或者cgit等工具

powershell 版本的一键更新hosts文件

  • GitHub520: 😘 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题。(无需安装)

更新Hosts

这部分对应于git-bash脚本

_hosts=$(mktemp /tmp/hostsXXX)
hosts=/c/Windows/System32/drivers/etc/hosts
remote=https://raw.hellogithub.com/hosts
reg='/# GitHub520 Host Start/,/# Github520 Host End/d'sed "$reg" $hosts > "$_hosts"
curl "$remote" >> "$_hosts"
cat "$_hosts" > "$hosts"rm "$_hosts"

操作步骤

  • 如果你不想了解细节,直接跳转到后面的一键运行整合脚本一节

准备:设置powershell执行策略

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy bypass

结束之后,如果不放心,可以将bypass重新设置为default

详情:Set-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Learn

powrshell脚本

function Update-githubHosts
{<# .SYNOPSIS函数会修改hosts文件,从github520项目获取快速访问的hosts.DESCRIPTION需要用管理员权限运行原项目提供了bash脚本,这里补充一个powershell版本的,这样就不需要打开git-bash.Notes与函数配套的,还有一个Deploy-githubHostsAutoUpdater,它可以向系统注册一个按时执行此脚本的自动任务(可能要管理员权限运行),可以用来自动更新hosts.NOTES可以将本函数放到powershell模块中,也可以当做单独的脚本运行.LINKhttps://github.com/521xueweihan/GitHub520.LINKhttps://gitee.com/xuchaoxin1375/scripts/tree/main/PS/Deploy#>[CmdletBinding()]param (# 可以使用通用的powershell参数(-verbose)查看运行细节$hosts = 'C:\Windows\System32\drivers\etc\hosts',$remote = 'https://raw.hellogithub.com/hosts')# 创建临时文件# $tempHosts = New-TemporaryFile# 定义 hosts 文件路径和远程 URL# 定义正则表达式$reg = '(?s)# GitHub520 Host Start.*?# GitHub520 Host End'# 读取 hosts 文件并删除指定内容,再追加新内容# $content = (Get-Content $hosts) $content = Get-Content -Raw -Path $hosts# Write-Host $content#debug 检查将要替换的内容#查看将要被替换的内容片段是否正确# $content -match $reg$res = [regex]::Match($content, $reg)Write-Verbose '----start----'Write-Verbose $res[0].ValueWrite-Verbose '----end----'# return $content = $content -replace $reg, ''# 追加新内容到$tempHosts文件中# $content | Set-Content $tempHosts#也可以这样写:#$content | >> $tempHosts # 下载远程内容并追加到临时文件# $NewHosts = New-TemporaryFile$New = Invoke-WebRequest -Uri $remote -UseBasicParsing #New是一个网络对象而不是字符串$New = $New.ToString() #清理头信息#移除结尾多余的空行,避免随着更新,hosts文件中的内容有大量的空行残留# 将内容覆盖添加到 hosts 文件 (需要管理员权限)# $content > $hosts$content.TrimEnd() > $hosts''>> $hosts #使用>>会引入一个换行符(设计实验:$s='123',$s > example;$s >> example就可以看出引入的换行),这里的策略是强控,即无论之前Github520的内容和前面的内容之间隔了多少个空格,# 这里总是移除多余(全部)空行,然后手动插入一个空行,再追加新内容(Gith520 hosts)$New.Trim() >> $hostsWrite-Verbose $($content + $NewContent)# 刷新配置ipconfig /flushdns}
Update-githubHosts

您可以将上述脚本复制粘贴到一个文本文件中(.txt),然后保存修改,并将文件重命名为fetch-github-hosts.ps1

建议单独创建一个文件夹来存放该文件,比如C:\GithubHostUpdate,或简单点的C:\GHU

PS C:\GHU> lsDirectory: C:\GHUMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2024/8/19    16:57           2517 fetch-github-hosts.ps1

后续计划任务会定期执行这里的脚本文件

你也可以考虑创建这个文件的快捷方式,指定不同的powershell版本(比如powershell7)来执行.ps1,而不是系统帮你选择

注册计划任务定期自动执行上述操作

下面的代码可以作为一次性的代码,可以保存到powershell配置文件或某个模块中

  • param($f = "$PSScriptRoot\fetch-github-hosts.ps1",[ValidateSet('pwsh', 'powershell')]$shell = 'powershell',[switch]$verbose
    )
    function Deploy-GithubHostsAutoUpdater
    {<# .SYNOPSIS向系统注册自动更新GithubHosts的计划任务.DESCRIPTION如果需要修改触发器,可以自行在源代码内调整,或者参考Microsoft相关文档;也可以使用taskschd.msc 图形界面来创建或修改计划任务.NOtes移除计划任务:unregister-ScheduledTask -TaskName  Update-GithubHosts#>[CmdletBinding()]param ([ValidateSet('pwsh', 'powershell')]$shell = 'powershell',# 需要执行的更新脚本位置$f = '' #自行指定)# 检查参数情况Write-Verbose 'Checking parameters ...'$PSBoundParameters | Format-Table   # 开始注册Write-Host 'Registering...'Start-Sleep 3# 定义计划任务的基本属性if (! $f){$f = "$PSScriptRoot\fetch-github-hosts.ps1" #自行修改为你的脚本保存目录(我将其放在powershell模块中,可以用$PSScriptRoot来指定目录)# $f = 'C:\repos\scripts\PS\Deploy\fetch-github-hosts.ps1' #这是绝对路径的例子(注意文件名到底是横杠(-)还是下划线(_)需要分清楚}$action = New-ScheduledTaskAction -Execute $shell -Argument " -ExecutionPolicy ByPass -NoProfile -WindowStyle Hidden -File $f"# 定义两个触发器$trigger1 = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)$trigger2 = New-ScheduledTaskTrigger -AtStartup# 任务执行角色设置$principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable# 创建计划任务Register-ScheduledTask -TaskName 'Update-githubHosts' -Action $action -Trigger $trigger1, $trigger2 -Settings $settings -Principal $principal
    }Deploy-GithubHostsAutoUpdater -f $f -shell $shell -Verbose:$verbose
    

    如同上一步的手法,将这一段代码保存到脚本文件C:\GHU\Autofetch.ps1

    可以用管理员方式运行它,或者在管理powershell中执行:

    # cd C:\GHU
    #调用它(可以传参,也可以不穿,使用默认参数) #号后面是传参示例
    C:\GHU\AutoFetch.ps1  # -f C:\GHU\fetch-github-hosts.ps1 -shell powershell
    

相关目录结构

PS C:\Users\cxxu\Desktop> ls C:\GHU\目录: C:\GHUMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2024/8/19     17:45           2155 AutoFetch.ps1
-a----         2024/8/19     16:57           2517 fetch-github-hosts.ps1

其他方法获取相关脚本

从PS/Deploy/GithubHostsUpdater · xuchaoxin1375/scripts - 码云 - 开源中国 (gitee.com)下载两个文件

gitee没有提供下载按钮,可以点击查看原始数据(或者直接点击下面的链接,然后分别保存,保存的时候后缀改为.ps1,而不是.txt)

  • gitee.com/xuchaoxin1375/scripts/raw/main/PS/Deploy/GithubHostsUpdater/AutoFetch.ps1
  • gitee.com/xuchaoxin1375/scripts/raw/main/PS/Deploy/GithubHostsUpdater/fetch-github-hosts.ps1

或者从本仓库的GHU目录下载

一键运行整合脚本🤖🐽

上面的步骤也许不是你关心的,那么一键运行了解以下

下面的代码自动下载需要的脚本文件,自动执行并注册到计划任务

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy bypass 
$files = ('AutoFetch.ps1', 'fetch-github-hosts.ps1')
$files | ForEach-Object {Invoke-RestMethod https://gitee.com/xuchaoxin1375/scripts/raw/main/PS/Deploy/GithubHostsUpdater/$_ > $home\desktop\$_ 
}$GHU = 'C:\GUH'
if (! (Test-Path $GHU) )
{ mkdir $GHU
}
Set-Location $home\desktop$files | ForEach-Object {Move-Item "$home/desktop/$_" $GHU -Force -Verbose
}
#调用它(可以传参,也可以不穿,使用默认参数) #号后面是传参示例
powershell -f  "$GHU\AutoFetch.ps1 " # -f $GHU\fetch-github-hosts.ps1 -shell powershell

管理员方式打开powershell,然后复制粘贴上述代码,运行即可

检查

  • 你可以通过以下命令来立即触发更新host的任务,看看是否生效

    start-scheduledTask -TaskName Update-githubhostssleep 5 #等待5秒钟,让更新操作完成
    # 检查hosts文件修改情况(上一次更改时间)
    $hosts = 'C:\Windows\System32\drivers\etc\hosts'
    ls $hosts|select LastWriteTime
    cat $hosts|select -Last 5 #查看hosts文件的最后5行信息
    # Notepad $hosts 查看整个hosts文件
    
  • 例如

    PS> $hosts = 'C:\Windows\System32\drivers\etc\hosts'PS☀️[BAT:77%][MEM:23.37% (7.41/31.71)GB][10:23:35]
    #⚡️[cxxu@CXXUCOLORFUL][192.168.1.178][C:\tmp\scoop-cn\Deploy-ScoopForCNUser]
    PS> ls $hosts|select LastWriteTimeLastWriteTime
    -------------
    2024/8/21 10:14:25
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s调度器Scheduler
  • Lodash——JavaScript中的工具库
  • buuctf [MRCTF2020]hello_world_go
  • 速盾:服务器接入cdn后上传图片失败怎么解决?
  • 主控和从控!!!
  • (二) 初入MySQL 【数据库管理】
  • C语言试题(含答案解析)
  • 发布npm包到GitLab教程
  • 树莓派+艺术品,有没有搞头?
  • 网络安全之DC-1靶机渗透实验
  • OZON免费选品工具大揭秘
  • 【Rust光年纪】深度解读:Rust语言中各类消息队列客户端库详细对比
  • azure-search-openai-demo-csharp does not deploy correctly to azure clooad
  • PostgreSQL初始化数据库和用户
  • 哈希表两数求和
  • [译]CSS 居中(Center)方法大合集
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Centos6.8 使用rpm安装mysql5.7
  • ERLANG 网工修炼笔记 ---- UDP
  • exif信息对照
  • gcc介绍及安装
  • Odoo domain写法及运用
  • scrapy学习之路4(itemloder的使用)
  • vue 配置sass、scss全局变量
  • 工程优化暨babel升级小记
  • 面试总结JavaScript篇
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 系统认识JavaScript正则表达式
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 原生Ajax
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Spring第一个helloWorld
  • ​业务双活的数据切换思路设计(下)
  • !!Dom4j 学习笔记
  • # include “ “ 和 # include < >两者的区别
  • (1)常见O(n^2)排序算法解析
  • (2)MFC+openGL单文档框架glFrame
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (十三)Flink SQL
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)Docker基本介绍
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .Net 6.0--通用帮助类--FileHelper
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net framework4与其client profile版本的区别
  • .Net Redis的秒杀Dome和异步执行
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @ConditionalOnProperty注解使用说明
  • @KafkaListener注解详解(一)| 常用参数详解
  • @PreAuthorize与@Secured注解的区别是什么?