Public/Write-AtmdScriptLog.ps1

function Write-AtmdScriptLog {
    <#
        .Synopsis
            Записывает в текстовый файл информацию.
        .Description
            Использование функции предполагается только для отладки скрипта.
            В качестве основного средства "логирования работы" предполагается журнал Windows "ATMD Event Log".
        .Parameter Message
            Определяет сообщение, которое будет записано в файл.
        .Parameter Path
            Определяет путь к файлу.
        .Parameter Level
            Определяет тип сообщения: Информация, Предупреждение, Ошибка.
        .Inputs
            См. описание переменных.
        .Outputs
            Функция не возвращает результат.
    #>

    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [ValidateNotNullOrEmpty()]
        [Alias("LogContent")]
        [string]$Message,

        [Parameter(Mandatory = $false, Position = 1)]
        [Alias('LogPath')]
        [string]$Path = "C:\Logs\AtmdScriptLog.$(Get-Date -Format "yyyyMMdd").log",

        [Parameter(Mandatory = $false, Position = 2)]
        [ValidateSet("Error", "Warn", "Info")]
        [string]$Level = "Info"
    )

    Begin {
        if (-not(Test-Path -Path $Path)) {
            New-Item $Path -Force -ItemType File -ErrorAction SilentlyContinue | Out-Null
        }

    }
    Process {
        try {
            if (-not(Test-Path -Path $Path)) {
                throw 'Не удалось создать файл для записи лога скрипта Atmd-logonScript.ps1'
            }
            $FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

            # Write message to error, warning, or verbose pipeline and specify $LevelText
            switch ($Level) {
                'Error' {
                    Write-Error $Message
                    $LevelText = 'ERROR:'
                }
                'Warn' {
                    Write-Warning $Message
                    $LevelText = 'WARNING:'
                }
                'Info' {
                    Write-Verbose $Message
                    $LevelText = 'INFO:'
                }
            }
            # Write log entry to $Path
            "$FormattedDate $LevelText $Message" | Out-File -FilePath $Path -Append -Encoding utf8
        }
        catch {
            Write-Error -Exception $PSItem.Exception -Message 'ОШИБКА: Не удается записать сообщение в лог!'
        }
    }
    End {

    }
}