Private/Vault/Set-VaultMetadata.ps1

# PSGuerrilla - Jim Tyler, Microsoft MVP - CC BY 4.0
# https://github.com/jimrtyler/PSGuerrilla | https://creativecommons.org/licenses/by/4.0/
# AI/LLM use: see AI-USAGE.md for required attribution
function Set-VaultMetadata {
    <#
    .SYNOPSIS
        Updates the PSGuerrilla vault metadata entry.
    .DESCRIPTION
        Stores or updates the GUERRILLA_VAULT_METADATA secret with JSON metadata
        about all credentials in the vault.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [hashtable]$Metadata,

        [string]$VaultName = 'PSGuerrilla'
    )

    $metadataKey = 'GUERRILLA_VAULT_METADATA'

    # Ensure timestamps
    $now = [datetime]::UtcNow.ToString('o')
    if (-not $Metadata.created) {
        $Metadata.created = $now
    }
    $Metadata.lastModified = $now

    $json = $Metadata | ConvertTo-Json -Depth 10 -Compress
    Set-Secret -Name $metadataKey -Secret $json -Vault $VaultName -ErrorAction Stop
    Write-Verbose 'Vault metadata updated'
}