Scripts/Set-DefaultPSGalleryUrl.ps1

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
param(
    [CmdletBinding()]
    [Parameter(Mandatory)][string]$RepoUrl,
        [switch]$RemoveAllOtherRepositories)

function Invoke-PSRepositoryBootstrap {
    [CmdletBinding()]
    param([string]$RepoUrl,
        [switch]$RemoveAllOtherRepositories)
        
    if($RemoveAllOtherRepositories) {
        Remove-AllNonDefaultPSRepositories
    }
            
    if($source = Get-PackageSource -Location $repoUrl -ProviderName PowerShellGet -ErrorAction SilentlyContinue ) {
        if($source.Name -like 'PSGallery') {
            Write-verbose "The default PSGallery already has the expected URL of $repoUrl"
            return
        }
    }    
    
    try {
        if(-not $source) {
            $source = Register-PackageSource -Name TempSource -Trusted -Location $repoUrl -ProviderName PowerShellGet
        }

        $null = Install-Package -Name PowerShellUtil -ProviderName PowerShellGet -Source $repoUrl -Force -MinimumVersion 1.0.1 -ForceBootstrap
        Import-Module PowerShellUtil -force
        Set-PSGalleryToPointToCustomUrl -Url $RepoUrl -RemoveAllOtherRepositories:$RemoveAllOtherRepositories
    } finally {

        try { Unregister-PackageSource -InputObject $source } catch {Write-Warning $_}
        try { Get-Module PowerShellUtil | Remove-Module -Force } catch { write-warning $_}
    }
}

function Set-PSGalleryToPointToCustomUrl {
    [CmdletBinding()]
    param([string]$Url )

    Set-PSRepositoryConfig -RepositoryName PSGallery -SourceLocation $Url `
                           -PublishLocation $Url `
                           -ScriptSourceLocation '' `
                           -ScriptPublishLocation '' `
                           -Trusted $true `
                           -InstallationPolicy Trusted
    #This forces a reload of the config file in the curren PowerShell session
    try {
        Set-PSRepository -Name PSGallery
    } catch {}

    try {
        Get-PSRepository
    } catch {Write-Warning $_}

}


Invoke-PSRepositoryBootstrap -RepoUrl $repoUrl -RemoveAllOtherRepositories:$RemoveAllOtherRepositories