src/storedcredential/storedcredential.ps1

Function GetStoredCredentialDirectory {
    if ($IsLinux) {
        $directory = Join-Path ~ .storedcredential
        New-Item -ItemType Directory -Force -Path $directory | Out-Null
        return $directory
    } else {
        $directory = Join-Path $env:localappdata StoredCredential
        New-Item -ItemType Directory -Force -Path $directory | Out-Null
        return $directory
    }
}

Function Get-StoredCredential {
    <#
    .DESCRIPTION
        Function to get store and get credentials
#>

    [OutputType([PSCredential])]
    Param(
        [Parameter(Mandatory)][string]$Username
    )

    $domainAndUsername = $Username.Split('\')

    if ($domainAndUsername.Length -eq 2) {
        $domain = $domainAndUsername[0]
        $username = $domainAndUsername[1]
    }
    else {
        $domain = $null
        $username = $domainAndUsername[0]
    }

    $directory = GetStoredCredentialDirectory

    $credPath = Join-Path $directory $domain
    $credPath = Join-Path $credPath "$username.xml"

    $Credential = Import-CliXml -Path $credPath
    #${script:$Username} = $Credential
    return $Credential
}

New-Alias gsc Get-StoredCredential -Ea SilentlyContinue

Function Save-StoredCredential {
    <#
    .DESCRIPTION
        Function to get store and get credentials
#>

    [OutputType([void])]
    Param(
        [Parameter(Mandatory = $True)][PSCredential]$Credential
    )

    <#
    if (!(Test-Credential $Credential)) {
        throw "Credential for $($Credential.UserName) could not be validated."
    }
    #>


    $directory = GetStoredCredentialDirectory
    New-Item -ItemType Directory -Force -Path $directory | Out-Null

    $domainAndUsername = $Credential.UserName.ToString().Split('\')


    if ($domainAndUsername.Length -eq 2) {
        $domain = $domainAndUsername[0]
        $username = $domainAndUsername[1]
    }
    else {
        $domain = $null
        $username = $domainAndUsername[0]
    }

    if ($domain) {
        $credPath = Join-Path $directory $domain
        New-Item -ItemType Directory -Force -Path $credPath | Out-Null
    }
    else {
        $credPath = $directory
    }

    $Credential | Export-CliXml -Path "$credPath\$username.xml"
}

Function Show-StoredCredential {
    [OutputType([string[]])]
    Param()

    $directory = GetStoredCredentialDirectory

    $domainFolders = Get-ChildItem $directory

    $credentials = @()
    foreach ($domainFolder in $domainFolders) {
        $credentialFiles = Get-ChildItem $domainFolder.FullName

        foreach ($credentialFile in $credentialFiles) {
            $domainName = $domainFolder.Name
            $credentialName = $credentialFile.Name.Replace(".xml", "")

            $credentials += "$domainName\$credentialName"
        }
    }

    return $credentials
}