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 Path
        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 -Database '/tmp/test.fdb' -Environment $fbEnv
        Returns details for the database at '/tmp/test.fdb' using the specified environment.
    .EXAMPLE
        Get-FirebirdDatabase -Database '/tmp/test.fdb'
        Returns details for the database at '/tmp/test.fdb' using the current environment.
    .OUTPUTS
        FirebirdDatabase object with Environment, Database, PageSize, and ODSVersion properties.
    #>


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

        [FirebirdEnvironment]$Environment = [FirebirdEnvironment]::default()
    )

    Write-VerboseMark -Message "Using Firebird environment at '$($Environment.Path)'"

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

    $gstatResult = Invoke-ExternalCommand {
        $query | & $gstat -h $Path
    } -Passthru

    # Parse gstat output. Discard first 5 lines, stop at ODS Version.
    $pageSize = $null
    $odsVersion = $null
    $lines = $gstatResult.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
            Path = $Path

            PageSize     = $PageSize
            ODSVersion   = $ODSVersion
        })
}