Public/Get-FirebirdDatabase.ps1

function Get-FirebirdDatabase {
    <#
    .SYNOPSIS
        Retrieves information about a Firebird database and its environment.
    .DESCRIPTION
        Returns a FirebirdDatabase object with details about the specified database and environment.
    .PARAMETER DatabasePath
        Path to the Firebird database file to inspect. Must exist.
    .PARAMETER Environment
        The Firebird environment to use. Defaults to the current environment if not specified.
    .EXAMPLE
        Get-FirebirdDatabase -DatabasePath '/tmp/test.fdb' -Environment $fbEnv
        Returns details for the database at '/tmp/test.fdb' using the specified environment.
    .EXAMPLE
        Get-FirebirdDatabase -DatabasePath '/tmp/test.fdb'
        Returns details for the database at '/tmp/test.fdb' using the current environment.
    .OUTPUTS
        FirebirdDatabase object with Environment, DatabasePath, PageSize, and ODSVersion properties.
    #>


    [CmdletBinding()]
    param(
        [Parameter(Position = 0, Mandatory, ValueFromPipeline)]
        [ValidateScript({ Test-Path $_ }, ErrorMessage = 'The DatabasePath must exist.')]
        [string]$DatabasePath,

        [FirebirdEnvironment]$Environment
    )

    $Environment ??= Get-FirebirdEnvironment -Verbose:$false
    Write-VerboseMark -Message "Using Firebird environment at '$($Environment.Path)'"

    $gstat = $Environment.GetGstatPath()
    Write-VerboseMark -Message "Checking database at '$($DatabasePath)'."

    $output = $query | & $gstat -h $DatabasePath 2>&1

    # Split StdOut and StdErr -- https://stackoverflow.com/a/68106198/33244
    $stdOut, $stdErr = $output.Where({ $_ -is [string] }, 'Split')
    if ($LASTEXITCODE -ne 0) {
        throw $stdErr
    }

    # Parse gstat output. Discard first 5 lines, stop at ODS Version.
    $pageSize = $null
    $odsVersion = $null
    $lines = $stdOut | Select-Object -Skip 5
    foreach ($line in $lines) {
        if ($line -match '^\s+Page size\s+(\d+)') {
            $pageSize = [int]$Matches[1].Trim()
        }

        if ($line -match '^\s+ODS Version\s+([\d]+.[\d]+)') {
            $odsVersion = [version]$Matches[1].Trim()
            break; # Stop processing further lines
        }
    }

    # Return the database information as a FirebirdDatabase class instance.
    [FirebirdDatabase]::new(@{
            Environment  = $Environment
            DatabasePath = $DatabasePath

            PageSize     = $PageSize
            ODSVersion   = $ODSVersion
        })
}