Lib/helper_nuget.psm1

<#
    .SYNOPSIS
        Download Library. Install Nuget
 
    .DESCRIPTION
        Download Library. Install Nuget. This will install a stand-alone version of nuget.exe
        Additionally Azure Artifact Credeital Provides is installed.
 
    .NOTES
        Author : hillesheim@n-dimensions.de
        Version : 1.3
        DateLastChanged : 2024-11-11
#>
 

Param ( 
    [Switch] $Auto 
)

Write-Host "Load nested module 'helper_nuget' (1.3.) ... "; 

#region begin DECLARATION
    
    #region begin TYPES
    #endregion

    #region begin USER_VARIABLES
    #endregion

    #region begin SYSTEM_VARIABLES

    [String] $psScriptFilePath = $MyInvocation.MyCommand.Definition; 
    [String] $psScriptFolderPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent; 
    [String] $defaultUrlArtifactsCredproviderPsScript = "https://aka.ms/install-artifacts-credprovider.ps1"; 
    
    #endregion

#endregion

#region FUNCTIONS_PUBLIC


Function Install-Nuget {

    Write-Host ("Install nuget ... ") -ForegroundColor Green; 
    
    Initialize-NugetClient `
        -NugetSettings $Global:nugetSettings; 

    Get-NugetFromWeb `
        -NugetSettings $Global:nugetSettings; 

    Get-ArtifactCredProvider `
        -ArtifactSettings $Global:artifactSettings; 

    Add-NugetEnvPath `
        -NugetSettings $Global:nugetSettings; 

}

#endregion

#region FUNCTIONS_PRIVATE

Function Initialize-NugetClient {
    Param(
        [NugetSettings] $NugetSettings 
    )

    Write-Host ( "Initialize nuget client environment ... " );    

    [String[]] $folders = @(
        $NugetSettings.NugetProgramFolder, 
        $NugetSettings.NugetPackagesInstallFolder
    )

    $folders `
        | ForEach-Object {
            Write-Host ("- Check for folder '{0}' ... " -f $_)
            If ( -not ( Test-Path $_ ) ) {                
                New-Item -Path $_ -ItemType Directory; 
            }
            Else {
                Write-Host " No action required"; 
            }
        }

}
Function Add-NugetEnvPath {
    Param ( 
        [NugetSettings] $NugetSettings
    )

    [String] $newPath = $NugetSettings.NugetProgramFolder; 

    Write-Host ( "Update env:path variable. Add '{0}'" -f $newPath ); 

    # Check if new path already exists
    [String[]] $pathItems = [Environment]::GetEnvironmentVariable("Path", "Machine").Split(";"); 
    If ( $pathItems.Contains($newPath) ) {
        Write-Host ( "The environment variable already contains the new path. Abort." ); 
        Return; 
    } Else { # Add path
        [String] $currentPathValue = [Environment]::GetEnvironmentVariable("Path", "Machine"); 
        If ( -not ( $currentPathValue.EndsWith(";") ) ) {
            $currentPathValue += ";"; 
        }
        [String] $newPathValue = $currentPathValue + $newPath + ";"; 
        [Environment]::SetEnvironmentVariable("Path", $newPathValue, "Machine"); 
    }

}

Function Get-ArtifactCredProvider {
    Param(
        [ArtifactSettings] $ArtifactSettings 
    )

    Write-Host ("Get azure artifact credential provider from web ... ") -ForegroundColor Green; 

    Invoke-Expression "& { $(Invoke-RestMethod https://aka.ms/install-artifacts-credprovider.ps1) } -AddNetfx"; 
}

Function Get-NugetFromWeb { 
    Param ( 
        [NugetSettings] $NugetSettings
    ) 

    Write-Host ( "Get nuget.exe (StandAlone) from web ... " )  -ForegroundColor Green; 
    Write-Host ( "Save nuget.exe to nuget program files folder" -f $NugetSettings.NugetExeDownloadUrl, $NugetSettings.NugetProgramFolder ); 

    # Action
    Invoke-WebRequest `
        -Uri $NugetSettings.NugetExeDownloadUrl `
        -OutFile ([System.IO.Path]::Combine($NugetSettings.NugetProgramFolder, "nuget.exe")); 

    # Return Nuget.Config file paths
    Write-Host ( "'Nuget.Config' file path 1 (User) = '{0}'" -f "%appdata%\NuGet" ); 
    Write-Host ( "'Nuget.Config' file path 2 (System) = '{0}'" -f "%ProgramFiles(x86)%\NuGet\Config" ); 

}

#endregion

#region FUNCTIONS_QUEUED

# Function Add-NugetPackageSource {
# Param (
# [NugetSettings] $NugetSettings,
# [String] $NugetProgramFolder = $folders.NugetProgramFolder
# )
#
# Write-Host ( "Add nuget package source '{0}'" -f $NugetSettings.NuGetSourceName );
#
# cd $NugetProgramFolder;
#
# # Check for existing source
# [String[]] $s = `
# .\nuget.exe source `
# | Where-Object { $_ -like ( "*" + $NugetSettings.NuGetSourceName + "*" ) };
# If ( $s.Count -gt 0 ) {
# "Package source already exists. Skip.";
# Return
# }
#
# # Action
# Write-Host ( "- Nuget source properties: " );
# Write-Host ( " - Name: '{0}'" -f $NugetSettings.NuGetSourceName );
# Write-Host ( " - Source: '{0}'" -f $NugetSettings.AzArtifactFeedUrl );
# Write-Host ( " - UserName: '{0}'" -f $NugetSettings.AzArtifactUserName );
# Write-Host ( " - Password / PersonalAccessToken: '{0}'" -f $NugetSettings.AzApiKey ); # $NugetSettings.AzArtifactUserPassword );
#
# .\nuget.exe sources add `
# -Name $NugetSettings.NuGetSourceName `
# -Source $NugetSettings.AzArtifactFeedUrl `
# -UserName $NugetSettings.AzArtifactUserName `
# -Password $NugetSettings.AzApiKey;
# # $NugetSettings.AzArtifactUserPassword;
# }


#endregion

#region EXPORT

Export-ModuleMember -Function 'Install-Nuget'; 

#endregion