Meca.Tools.WindowsVault.psm1
|
$dllPath = Join-Path -Path $PSScriptRoot -ChildPath "Microsoft.Windows.SDK.NET.dll" Add-Type -Path $dllPath function Add-VaultCredential { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$Resource, [Parameter(Mandatory = $true, HelpMessage = "Username")] [string]$Username, [Parameter(Mandatory = $false)] [string]$Pass = $null ) if ($null -eq $Pass) { $Password = Read-Host -MaskInput -Prompt "Password" } else { if (Test-Path $Pass) { $Password = (Get-Content -Path $Pass).Trim() Write-Host "Password loaded from pass file." -ForegroundColor Green return $cleanedPassword } else { Write-Error "Passfile doesn't exist: $FilePath" exit 1 } } $vault = New-Object Windows.Security.Credentials.PasswordVault $credential = New-Object Windows.Security.Credentials.PasswordCredential( $Resource, $Username, $Password ) try { $vault.Add($credential) Write-Output "Credential added successfully for resource: $Resource" } catch { Write-Error "Failed to add credential: $_" } } function Remove-VaultCredential { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$Resource, [Parameter(Mandatory = $true, HelpMessage = "Username")] [string]$Username ) $vault = New-Object Windows.Security.Credentials.PasswordVault $credentials = $vault.RetrieveAll() | Where-Object { $_.Resource -eq $Resource -and $_.UserName -eq $Username } if ($credentials.Count -eq 0) { Write-Error "No credentials found for resource: $Resource and username: $Username" return } foreach ($credential in $credentials) { try { $vault.Remove($credential) Write-Output "Credential removed successfully for resource: $Resource and username: $Username" } catch { Write-Error "Failed to remove credential: $_" } } } function Get-VaultCredential { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$Resource, [Parameter(Mandatory = $false, HelpMessage = "Username")] [string]$Username = "defaultUser", [Parameter(Mandatory = $false)] [switch]$Plain ) $vault = New-Object Windows.Security.Credentials.PasswordVault $credential = $vault.Retrieve($Resource, $Username) if ($Plain) { return $credential.Password } return $credential } Export-ModuleMember -Function Add-VaultCredential, Remove-VaultCredential, Get-VaultCredential |