Public/Get-SqliteDBMetadata.ps1

function Get-SqliteDBMetadata {
  [OutputType([System.Collections.Specialized.OrderedDictionary])]
  [CmdletBinding()]
  param (
    [Parameter(Mandatory = $true)]
    [Microsoft.Data.Sqlite.SqliteConnection]
    $SqliteConnection,

    [Parameter()]
    [string[]]
    $MetadataKey = @('*')
  )

  $metadataPresent = [SqliteHelper]::InvokeSqliteQuery(
    $SqliteConnection,
    'SELECT name from sqlite_schema WHERE name = @name COLLATE NOCASE',
    @{ name = '_metadata' },
    'DataTable'
  )

  if (!$metadataPresent -or $metadataPresent.Rows.Count -eq 0) {
    return $null
  }

  if ($MetadataKey -contains '*') {
    $query = 'SELECT key, value from _metadata;'
    $rows = [SqliteHelper]::InvokeSqliteQuery($SqliteConnection, $query, @{}, 'PSCustomObject')
  } else {
    $placeholders = @()
    $parameters = @{}
    for ($i = 0; $i -lt $MetadataKey.Count; $i++) {
      $pName = "k$i"
      $placeholders += "@$pName"
      $parameters[$pName] = $MetadataKey[$i]
    }

    $query = ('SELECT key, value from _metadata WHERE key IN ({0});' -f ($placeholders -join ', '))
    $rows = [SqliteHelper]::InvokeSqliteQuery($SqliteConnection, $query, $parameters, 'PSCustomObject')
  }

  $out = [System.Collections.Specialized.OrderedDictionary]::new()
  foreach ($row in $rows) {
    $out[$row.key] = $row.value
  }
  return $out
}