functions/Export-Credentials.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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
function export-credentials([Parameter(Mandatory=$true)]$container, $cred, [Alias("dir")]$cacheDir = "pscredentials") { $pass = $null if (![string]::isnullorempty($cred.Password)) { $pass = $cred.Password | ConvertFrom-SecureString } $result = New-Object -TypeName pscustomobject -Property @{ Password = $pass; Username = $cred.UserName } export-cache $result -container $container -dir $cacheDir } function import-credentials([Parameter(Mandatory=$true)] $container, [Alias("dir")]$cacheDir = "pscredentials") { $lastcred = import-cache $container -dir $cacheDir if ($lastcred -ne $null) { if (![string]::isnullorempty($lastcred.Password)) { $password = $lastcred.Password | ConvertTo-SecureString $username = $lastcred.Username $cred = New-Object System.Management.Automation.PsCredential $username,$password } } return $cred } function Get-PasswordCached { [CmdletBinding()] param([Parameter(Mandatory=$true)]$container, $message, [switch][bool] $allowuserUI, [switch][bool]$secure) $cacheDir = "pscredentials" try { $cred = import-credentials $container -dir $cacheDir if ($cred -eq $null) { if ($allowuserUI) { $cred = Get-CredentialsCached -container $container -message $message } else { return $null } } if ($secure) { return $cred.password } else { return $cred.GetNetworkCredential().Password } } catch { throw return $null } } function Get-CredentialsCached { [CmdletBinding()] param([Parameter(Mandatory=$true)]$container, $message, [switch][bool]$reset = $false) $cred = $null $cacheDir = "pscredentials" if (!$reset) { try { $cred = import-credentials $container -dir $cacheDir } catch { } } if ($cred -eq $null) { import-module Microsoft.PowerShell.Security if ($message -eq $null) { $message = "Please provide credentials for '$container'" } if ($global:promptpreference -ne 'SilentlyContinue') { $cred = Get-Credential -Message $message } else { return $null } } export-credentials $container $cred -dir $cacheDir return $cred } function Remove-CredentialsCached($container) { $cacheDir = "pscredentials" remove-cache $container -dir $cacheDir } |