Private/New-StmError.ps1

function New-StmError {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [System.Exception]
        $Exception,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $ErrorId,

        [Parameter(Mandatory = $true)]
        [System.Management.Automation.ErrorCategory]
        $ErrorCategory,

        [Parameter(Mandatory = $false)]
        [object]
        $TargetObject,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Message,

        [Parameter(Mandatory = $false)]
        [string]
        $RecommendedAction
    )

    begin {
        Write-Verbose "Creating error record with ID '$ErrorId'"
    }

    process {
        $errorDetails = New-Object -TypeName 'System.Management.Automation.ErrorDetails' -ArgumentList $Message
        $errorRecord = New-Object -TypeName 'System.Management.Automation.ErrorRecord' -ArgumentList @(
            $Exception,        # The original exception
            $ErrorId,          # The error ID
            $ErrorCategory,    # The error category
            $TargetObject      # The target object
        )

        $errorRecord.ErrorDetails = $errorDetails

        if ($PSBoundParameters.ContainsKey('RecommendedAction')) {
            $errorRecord.ErrorDetails.RecommendedAction = $RecommendedAction
        }

        $errorRecord
    }

    end {
        Write-Verbose 'Error record created successfully'
    }
}