testscript.ps1

$vaultname = "LinuxKeyring"
$localModuleManifest = Join-Path -Path $PSScriptRoot -ChildPath "SecretManagement.LinuxKeyring.psd1"

if (-not (Get-Module -ListAvailable -Name Microsoft.PowerShell.SecretManagement)) {
    Install-Module -Name Microsoft.PowerShell.SecretManagement -Scope CurrentUser -Force
}

if (-not (Get-Module -ListAvailable -Name SecretManagement.LinuxKeyring)) {
    Install-Module -Name SecretManagement.LinuxKeyring -Scope CurrentUser -Force
}

Import-Module -Name Microsoft.PowerShell.SecretManagement -Force

# Prefer the local workspace module during development to avoid loading an older installed copy.
if (Test-Path -Path $localModuleManifest) {
    Remove-Module SecretManagement.LinuxKeyring.Extension -ErrorAction SilentlyContinue
    Remove-Module SecretManagement.LinuxKeyring -ErrorAction SilentlyContinue
    Import-Module -Name $localModuleManifest -Force
}
else {
    Import-Module -Name SecretManagement.LinuxKeyring -Force
}

Write-Output "Loaded module path: $((Get-Module -Name SecretManagement.LinuxKeyring).Path)"
Write-Output "Loaded extension path: $((Get-Module -Name SecretManagement.LinuxKeyring.Extension).Path)"

$localModulePath = Split-Path -Path $localModuleManifest -Parent
$vault = Get-SecretVault -Name $vaultname -ErrorAction SilentlyContinue

if (-not $vault) {
    Write-Output "Registering secret vault '$vaultname'..."
    Register-SecretVault -Name $vaultname -ModuleName $localModuleManifest -DefaultVault -ErrorAction Stop
}
elseif ($vault.ModulePath -ne $localModulePath) {
    Write-Output "Vault '$vaultname' is registered to '$($vault.ModulePath)'. Re-registering to local module path '$localModulePath'..."
    Unregister-SecretVault -Name $vaultname -ErrorAction Stop
    Register-SecretVault -Name $vaultname -ModuleName $localModuleManifest -DefaultVault -ErrorAction Stop
}
else {
    Write-Output "Secret vault '$vaultname' is already registered."
}

$username1 = "testuser"
$password1 = "P@ssw0rd54321"
$credential = New-Object System.Management.Automation.PSCredential ($username1, (ConvertTo-SecureString $password1 -AsPlainText -Force))

Write-Output "Storing secret for user '$username1'..."
Set-Secret -Name "TestUser" -Vault $vaultname -Secret $credential

Write-Output "Retrieving secret for user '$username1'..."
$cred = Get-Secret -Name "TestUser" -Vault $vaultname

if ($cred -is [System.Management.Automation.PSCredential]) {
    Write-Output "Retrieved credential is of type PSCredential."
    $cred.UserName
    $cred.GetNetworkCredential().Password
} else {
    Write-Output "Retrieved credential is of type: $($cred.GetType().FullName)."
}

Remove-Secret -Name "TestUser" -Vault $vaultname -ErrorAction SilentlyContinue
Write-Output "Removed secret for user '$username1'."

$secstring = "this is a test string" | ConvertTo-SecureString -AsPlainText -Force
Write-Output "Storing a secure string secret..."
Set-Secret -Name "TestString" -Vault $vaultname -Secret $secstring

Write-Output "Retrieving the secure string secret..."
$retrievedSecString = Get-Secret -Name "TestString" -Vault $vaultname -AsPlainText
Write-Output "Retrieved secure string: $retrievedSecString"

Remove-Secret -Name "TestString" -Vault $vaultname -ErrorAction SilentlyContinue
Write-Output "Removed secure string secret."