abstract

脚本说明

  • 以下脚本对原脚本的扩展和改进,提供更多的灵活性和安装方案,以及更加详细的注释
  • 对于某些精简版或修改版系统默认将用户权限提到Administrator的情况提供安装支持选项
下载或安装脚本
  • 下载或者安装下面的脚本,然后用powershell执行(导入)
  • 当然,您也可以直接复制下面的代码,然后粘贴到powershell中(推荐powershell v7+)
function Get-AvailableGithubMirrors
{
    <# 
.SYNOPSIS
列出流行的或可能可用的github加速镜像站
列表中的镜像站可能会过期,可用性不做稳定性和可用性保证

.DESCRIPTION
推荐使用aria2等多线程下载工具来加速下载,让镜像加速效果更加明显
    #>
    [CmdletBinding()]
    param(
        [switch]$ListView,
        [switch]$PassThru
    )

    $m1 = 'https://mirror.ghproxy.com'
    $m2 = 'https://ghproxy.cc'
    $m3 = 'https://github.moeyy.xyz/'
    $m4 = 'https://ghproxy.net/'
    $m5 = 'https://gh.ddlc.top/'
 
    Write-Host 'Available mirrors:'
    $mirrors = @($m1, $m2, $m3, $m4, $m5) 
    

    $s = { 
        $mirrors | ForEach-Object { 
            $i = [array]::IndexOf($mirrors, $_)
            Write-Host " ${i}: $_"
        }
    }

    $s.Invoke()
     
    if ($PassThru)
    {

        return $mirrors
    }
    
}

function Deploy-ScoopByGithubMirrors
{
    
    [CmdletBinding()]
    param (
        
        [switch]$InstallBasicSoftwares,
        $ScriptsDirectory = "$home/Downloads"
    )
    $mirrors = Get-AvailableGithubMirrors -PassThru
    $numOfMirrors = $mirrors.Count
    $range = "[0~$($numOfMirrors-1)]"
    $num = Read-Host -Prompt "Select the number of the mirror you want to use $range ?(default: 0)"
 
    if (!$num)
    {
        Write-Host 'choose the Default 0'
    }
    elseif ( !($num -as [int]))
    {
        Write-Error " Input a number within the range! $range"
    }
    $mirror = $mirrors[$num]
    ## 加速下载scoop原生安装脚本
    $script = (Invoke-RestMethod $mirror/https://raw.githubusercontent.com/scoopinstaller/install/master/install.ps1)
 
    $installer = "$ScriptsDirectory/scoop_installer.ps1"
    $installer_cn = "$ScriptsDirectory/scoop_cn_installer.ps1"
    # 利用字符串的Replace方法,将 https://github.com 替换为 $mirror/https://github.com加速
    $script> $installer
    $script.Replace('https://github.com', "$mirror/https://github.com") > $installer_cn
 
    # 根据scoopd官方文档,管理员(权限)安装scoop时需要添加参数 -RunAsAdmin参数,否则会无法安装
    # 或者你可以直接将上述代码下载下来的家目录scoop_installer_cn文件中的相关代码片段注释掉(Deny-Install 调用语句注释掉)
    $r = Read-Host -Prompt 'Install scoop as Administrator Privilege? [Y/n]'
    if ($r)
    {
        #必要时请手动打开管理员权限的powershell,然后运行此脚本
        Invoke-Expression "& $installer_cn -RunAsAdmin"
    }
    else
    {
 
        Invoke-Expression "& $installer_cn"
    }
 
    # 将 Scoop 的仓库源替换为代理的
    scoop config scoop_repo $mirror/https://github.com/ScoopInstaller/Scoop
 
    New-Item -ItemType 'directory' -Path "$env:USERPROFILE\scoop\buckets\scoop-cn\bucket"
    # 可选部分
 
 
    ## 如果没有安装 Git等常用工具,可以解开下面的注释
    ## 先下载几个必需的软件的 JSON,组成一个临时的应用仓库
    if ($InstallBasicSoftwares)
    {
        New-Item -ItemType 'directory' -Path "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\7-zip"
        New-Item -ItemType 'directory' -Path "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\git"
        # 7zip软件资源
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/bucket/7zip.json -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\bucket\7zip.json"
        #注册7-zip的右键菜单等操作
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/7-zip/install-context.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\7-zip\install-context.reg"
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/7-zip/uninstall-context.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\7-zip\uninstall-context.reg"
        # git软件资源
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/bucket/git.json -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\bucket\git.json"
     
        #注册git右键菜单等操作
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/git/install-context.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\git\install-context.reg"
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/git/uninstall-context.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\git\uninstall-context.reg"
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/git/install-file-associations.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\git\install-file-associations.reg"
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/scripts/git/uninstall-file-associations.reg -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\scripts\git\uninstall-file-associations.reg"
        #注册aria2
        Invoke-RestMethod -Uri $mirror/https://raw.githubusercontent.com/duzyn/scoop-cn/master/bucket/aria2.json -OutFile "$env:USERPROFILE\scoop\buckets\scoop-cn\bucket\aria2.json"
 
        # 安装时注意顺序是 7-Zip, Git, Aria2
        scoop install scoop-cn/7zip
        scoop install scoop-cn/git
        scoop install scoop-cn/aria2
        # 推荐使用aria2,设置多路下载
        scoop config aria2-split 16
    }
     
 
    # 将 Scoop 的 main 仓库源替换为代理加速过的
    if (Test-Path -Path "$env:USERPROFILE\scoop\buckets\main")
    {
        # 先移除默认的源,然后添加同名bucket和加速后的源
        scoop bucket rm main
    }
    Write-Host 'Adding speedup main bucket...'+" powered by: [$mirror]"
    scoop bucket add main $mirror/https://github.com/ScoopInstaller/Main
 
    # 之前的scoop-cn 库是临时的,还不是来自Git拉取的完整库,删掉后,重新添加 Git 仓库
    Write-Host 'remove Temporary scoop-cn bucket...'
    if (Test-Path -Path "$env:USERPROFILE\scoop\buckets\scoop-cn")
    {
        scoop bucket rm scoop-cn
    }
    Write-Host 'Adding scoop-cn bucket (from git repository)...'
    scoop bucket add scoop-cn $mirror/https://github.com/duzyn/scoop-cn
 
    # Set-Location "$env:USERPROFILE\scoop\buckets\scoop-cn"
    # git config pull.rebase true
 
    Write-Host 'scoop and scoop-cn was installed successfully!'
     
}
function Deploy-ScoopByGitee
{
    param (
                
    )
    # 脚本执行策略更改
    Set-ExecutionPolicy -ExecutionPolicy bypass -Scope CurrentUser
    #如果询问, 输入Y或A,同意
    
    # 执行安装命令(默认安装在用户目录下,如需更改请执行“自定义安装目录”命令)
    Invoke-WebRequest -useb scoop.201704.xyz | Invoke-Expression
    ## 自定义安装目录(注意将目录修改为合适位置)
    # irm scoop.201704.xyz -outfile 'install.ps1'
    # .\install.ps1 -ScoopDir 'D:\Scoop' -ScoopGlobalDir 'D:\GlobalScoopApps'
    #添加包含国内软件的的scoopcn bucket,其他bucket可以自行添加
    scoop bucket add scoopcn https://gitee.com/scoop-installer/scoopcn
}
function Add-ScoopBuckets
{
    <# 
            .SYNOPSIS
            基本上,添加spc这个bucket就够了,软件数量很丰富
            .DESCRIPTION
            可以根据自己的需要往里面修改或添加更多的bucket
            #>
    [CmdletBinding()]
    param (
                
    )
             
    Write-Host 'Adding more buckets...(It may take a while, please be patient!)'
    scoop bucket add spc $mirror/https://github.com/lzwme/scoop-proxy-cn   
            
}
function Deploy-ScoopForCNUser
{
 
    # & "$PSScriptRoot\scoopDeploy.ps1"

    <# 
.SYNOPSIS
国内用户部署scoop
.Description
允许用户在一台没有安装git等软件的windows电脑上部署scoop包管理工具
如果你事先安装好了git,那么可以选择不安装(默认行为)

脚本会通过github镜像站加速各个相关链接进行达到提速的目的
    通过加速站下载原版安装脚本
    通过替换原版安装脚本中的链接为加速链接来加速安装scoop
    根据需要创建临时的bucket,让用户可以通过scoop来安装git等软件
针对某些Administrator用户,scoop默认拒绝安装,这里根据官方指南,做了修改,允许用户选择仍然安装
.NOTES
代码来自git/gitee上的开源项目(感谢作者的相关工作和贡献)


.DESCRIPTION
使用镜像加速下载scoop原生安装脚本并做一定的修改提供加速安装(但是稳定性和可靠性不做保证)
此脚本参考了多个开源方案,为提供了更多的灵活性和备用方案的选择,尤其是可以添加spc这个大型bucket,以提供更多的软件包
.LINK
镜像加速参考
https://github.akams.cn/ 
.LINK
https://gitee.com/twelve-water-boiling/scoop-cn
.LINK
# 提供 Deploy-ScoopByGitee 实现资源
https://gitee.com/scoop-installer/scoop
.LINK
# 提供 Deploy-scoopbyGithubMirrors 实现方式
https://lzw.me/a/scoop.html#2%20%E5%AE%89%E8%A3%85%20Scoop
.LINK
# 提供 大型bucket spc 资源
https://github.com/lzwme/scoop-proxy-cn
.LINK
相关博客
#提供 Deploy-ScoopForCNUser 整合与改进


在这里搜索scoop相关笔记
https://gitee.com/xuchaoxin1375/blogs/blob/main/windows 

#>
    [CmdletBinding(DefaultParameterSetName = 'Manual')]
    param(
       
        # 是否仅查看内置的候选镜像列表
        # [switch]$CheckMirrorsBuildin,
        # 从镜像列表中选择镜像
        # [switch]$SelectMirrorFromList,
        # 是否安装基础软件,比如git等(考虑到有些用户已经安装过了,我们可以按需选择)
        [parameter(ParameterSetName = 'Manual')]
        [switch]$InstallBasicSoftwares,
        [parameter(ParameterSetName = 'Gitee')]
        [switch]$UseGiteeForkAndBucket,
        # 是否添加一个大型的bucket
        [switch]$AddMoreBuckets,
        # 延迟启动安装,给用户一点时间反悔
        $delay = 3
    )
    
    
    # return $mirror

    # 安装 Scoop
    # Gitee方案(简短,执行完后自动退出)
    if ($UseGiteeForkAndBucket)
    {
        Write-Host 'UseGiteeForkAndBucket scheme...'
        Start-Sleep $delay
        Deploy-ScoopByGitee
    }
    # 手动配置镜像方案
    else
    {
        Write-Host 'Use manual scheme...'
        # Start-Sleep $delay
        Deploy-ScoopByGithubMirrors -InstallBasicSoftwares:$InstallBasicSoftwares
    }

    if ($AddMoreBuckets)
    {
        # 添加bucket,包含很多软件包(几乎scoop bucket known列出的bucket的软件都能够在spc中找到)
        Add-ScoopBuckets
    }

    #检查用户安装了哪些bucket,以及对应的bucket源链接
    scoop bucket list

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
  • 247.
  • 248.
  • 249.
  • 250.
  • 251.
  • 252.
  • 253.
  • 254.
  • 255.
  • 256.
  • 257.
  • 258.
  • 259.
  • 260.
  • 261.
  • 262.
  • 263.
  • 264.
  • 265.
  • 266.
  • 267.
  • 268.
  • 269.
  • 270.
  • 271.
  • 272.
  • 273.
  • 274.
  • 275.
  • 276.
  • 277.
  • 278.
  • 279.
Notes
  • 上述脚本经过测试,可以正常工作
  • 可以新建一个本地账户(利用语句net user tester 1 /add创建一个测试用户tester,密码是1);登陆tester来验证其是否能工作

获取脚本文件及其使用

导入
  • 方案1:从脚本文件导入powershell
  • 可以复制粘贴上述代码到文本文件,然后修改后缀为.ps1
  • 也从仓库的Deploy-ScoopForCNUser中保存脚本文件
  • 然后打开powershell执行这个脚本文件,会导入其中的函数
  • 方案2:通过复制粘贴到powershell中回车导入
执行方案
  • 导入完毕后,选择执行方案
  • 这里提供了多个函数,其中主要函数是deploy-ScoopForCNUser ,有两大类调用语法(对应两类部署方案,默认使用第一种)
PS C:\repos\scoop-cn> gcm Deploy-ScoopForCNUser -Syntax

Deploy-ScoopForCNUser [-InstallBasicSoftwares] [-AddMoreBuckets] [-delay <Object>] [<CommonParameters>]

Deploy-ScoopForCNUser [-UseGiteeForkAndBucket] [-AddMoreBuckets] [-delay <Object>] [<CommonParameters>]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 如果用户事先安装过Git,那么可以直接执行Deploy-ScoopForCNUser,其他参数可选
  • 对于没有安装过Git的用户,建议使用(否则会因为确实Git而无法添加Bucket等操作)
deploy-ScoopForCNUser -InstallBasicSoftwares
  • 1.
  • 或者使用另一种Gitee方案安装
deploy-ScoopForCNUser -UseGiteeForkAndBucket
  • 1.
FAQ
  • 对于脚本文件方案,如果执行失败,可以设置执行策略:
set-executionPolicy -Scope CurrentUser -ExecutionPolicy bypass
  • 1.
  • 然后重新尝试

refs

.LINK
镜像加速参考
  https://github.akams.cn/ .LINK
https://gitee.com/twelve-water-boiling/scoop-cn
.LINK

提供 Deploy-ScoopByGitee 实现资源

 https://gitee.com/scoop-installer/scoop .LINK

提供 Deploy-scoopbyGithubMirrors 实现方式

 https://lzw.me/a/scoop.html#2%20%E5%AE%89%E8%A3%85%20Scoop .LINK

提供 大型bucket spc 资源

 https://github.com/lzwme/scoop-proxy-cn .LINK
相关博客
#提供 Deploy-ScoopForCNUser 整合与改进

在这里搜索scoop相关笔记
  https://gitee.com/xuchaoxin1375/blogs/blob/main/windows