Private/Functions/Invoke-Logger.ps1

<#
.SYNOPSIS
    Centralise l'affichage des messages de log pour StepManager.
.DESCRIPTION
    Permet d'afficher des messages typés (Info, Success, Warning, Error, Debug, Verbose) avec indentation et support d'un logger personnalisé.
    Si aucun logger n'est défini, affiche le message formaté dans la console.
    Les messages Debug ne sont affichés que si $DebugPreference le permet.
.PARAMETER Component
    Nom du composant ou de l'étape à l'origine du message.
.PARAMETER Message
    Le message à afficher.
.PARAMETER Severity
    Le niveau de sévérité du message : Info, Success, Warning, Error, Debug, Verbose.
.PARAMETER IndentLevel
    Niveau d'indentation pour l'affichage (entier, optionnel).
#>

function Invoke-Logger {
    param(
        [Parameter(Mandatory)] [string]$Component,
        [Parameter(Mandatory)] [string]$Message,
        [Parameter(Mandatory)] [ValidateSet('Info','Success','Warning','Error','Debug','Verbose')] [string]$Severity,
        [int]$IndentLevel = [int]::MinValue
    )
    $logger = $null
    # Indentation: respecte une valeur explicite sinon calcule depuis la step courante
    $explicitIndent = ($IndentLevel -ne [int]::MinValue)
    $finalIndent = if ($explicitIndent) { $IndentLevel } else { 0 }
    if (-not $explicitIndent) {
        if ($script:InsideStep) {
            try {
                $currentStep = Get-CurrentStep
                if ($null -ne $currentStep) { $finalIndent = $currentStep.Level + 1 } else { $finalIndent = 1 }
            } catch { $finalIndent = 1 }
        }
    }
    # Gestion du niveau Debug et Verbose
    if ($Severity -eq 'Debug') { if ($DebugPreference -eq 'SilentlyContinue') { return } }
    if ($Severity -eq 'Verbose') { if ($VerbosePreference -eq 'SilentlyContinue') { return } }
    try {
        $logger = Get-PSVariable -Name 'StepManagerLogger' -ErrorAction Stop
    } catch {
        $logger = $null
        try {
            $logger = (Get-Variable -Name 'StepManagerLogger' -Scope Script -ErrorAction Stop).Value
        } catch {
            try {
                $logger = (Get-Variable -Name 'StepManagerLogger' -Scope Global -ErrorAction Stop).Value
            } catch {}
        }
    }
    if ($null -eq $logger) {
        Write-StepMessage -Severity $Severity -Message ("[$Component] $Message") -IndentLevel $finalIndent
    } else {
        & $logger $Component $Message $Severity $finalIndent
    }
}