Public/Sources/Add-ChocoSource.ps1

Function Add-ChocoSource {
    <#
    .SYNOPSIS
        Add a new chocolatey source.
    .DESCRIPTION
        Add a new chocolatey source.
    .PARAMETER Name
        The name of the source.
    .PARAMETER Uri
        The Uri of the source.
    .PARAMETER Credential
        The credential to use to access the source.
    .EXAMPLE
        Add-ChocoSource
        Name Uri UserName
        ---- --- --------
        chocolatey https://community.chocolatey.org/api/v2/

    .OUTPUTS
        PSCustomObject
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory = $true)]
        [String] $Name,

        [Parameter(Mandatory = $true)]
        [String] $Uri,

        [PSCredential] $Credential
    )
    begin {
        if (-Not (Test-ChocoInstalled)) {
            Write-Error "Chocolatey is not installed. Please install it first."
            return
        }

        [String[]]$Arguments = "source", "add", "-s=""$Uri""", "-n=$Name"

        if ($Credential) {
            $Arguments += "-u=$($Credential.GetNetworkCredential().UserName)"
            $Arguments += "-p=$($Credential.GetNetworkCredential().Password)"
        }
    }
    process {
        try {

            $CommandOutput = Invoke-ChocoCommand $Arguments

            if ($CommandOutput.RawOutput -like "Added*") {
                $Status = "Added"
            }
            elseif ($CommandOutput.RawOutput -like "Updated*") {
                $Status = "Updated"
            }
            elseif ($CommandOutput.RawOutput -like "Nothing to change*") {
                $Status = "Nothing to change"
            }

            Return [PSCustomObject]@{
                Name   = $Name
                Uri    = $Uri
                Status = $Status
            }

        }
        catch {
            Write-Error "Cannot add source. Error: $_"
        }

    }
    end {

    }
}