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 } |