public/Export-SecretStore.ps1
function Export-SecretStore { <# .SYNOPSIS Exports secrets from a specified secret vault. .DESCRIPTION This function retrieves secrets from a specified secret vault and exports them in a clear text format. .PARAMETER VaultName The name of the secret vault to export secrets from. .PARAMETER OutputFile The path to the output file where the exported secrets will be saved. .EXAMPLE Export-SecretStore -VaultName "MyVault" -OutputFile "C:\secrets.json" Exports secrets from the "MyVault" secret vault to the specified JSON file. .EXAMPLE Export-SecretStore -VaultName "MyVault" Exports secrets from the "MyVault" secret vault to the default output (console). .NOTES Requires Microsoft.PowerShell.SecretManagement module. .LINK https://github.com/Skatterbrainz/helium/blob/master/docs/Export-SecretStore.md #> [CmdletBinding()] param ( [parameter(Mandatory=$True)][string]$VaultName, [parameter(Mandatory=$false)][string]$OutputFile ) if (!(Get-Module -Name Microsoft.PowerShell.SecretManagement)) { Write-Error "Microsoft.PowerShell.SecretManagement module is not installed." return } Write-Warning "This will export secrets in clear text from the vault: $vaultname - Do you wish to continue?" if (-not (Read-Host "Type 'yes' to continue") -eq 'yes') { Write-Host "Export cancelled." return } if (Get-SecretVault -Name $VaultName -ErrorAction SilentlyContinue) { Write-Verbose "Vault found: $VaultName" } else { Write-Error "Vault not found: $VaultName" break } Unlock-SecretVault -Name $VaultName [array]$secrets = Get-SecretInfo -Vault $VaultName $results = @() foreach ($secret in $secrets) { if ($secret.Type -eq 'String') { $value = Get-Secret -Name $secret.Name -Vault $VaultName -AsPlainText $results += ([pscustomobject]@{ Name = $secret.Name Type = $secret.Type Value = $value }) } else { # pscredential object > convert to username and password in clear text $value = Get-Secret -Name $secret.Name -Vault $VaultName $username = $value.UserName $password = $value.GetNetworkCredential().Password $results += ([pscustomobject]@{ Name = $secret.Name Type = $secret.Type UserName = $username Password = $password }) } } if (![string]::IsNullOrWhiteSpace($OutputFile)) { $results | ConvertTo-Json | Out-File -FilePath $OutputFile -Encoding utf8 } else { $results | ConvertTo-Json } } |