Powershell - Порядок записи в файл журнала по новейшим - PullRequest
0 голосов
/ 05 марта 2020

Я пишу в .csv файл журнала, используя эту функцию:

function Write-Log {
     [CmdletBinding()]
     param(
         [Parameter()]
         [ValidateNotNullOrEmpty()]
         [string]$Message,

         [Parameter()]
         [ValidateNotNullOrEmpty()]
         [ValidateSet('Information','Warning','Error')]
         [string]$Severity = 'Information'
     )

     [pscustomobject]@{
         Time = (Get-Date -f g)
         Message = $Message
         Severity = $Severity
     } | Export-Csv -Path $LogFilePath -Append -NoTypeInformation
 }

Все работает хорошо, за исключением того, что он назначает каждую запись сверху вниз. От самого старого до самого нового. Это означает, что каждый раз, когда мне нужно прокрутить вниз до .csv , чтобы увидеть последний запуск скрипта. Как я могу изменить функцию, чтобы она отображала самую последнюю запись сверху и самую старую снизу?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Если вы не возражаете, регистрация будет медленной, но вы хотите, чтобы все было в формате CSV, это должно сделать то, что вы хотите:

function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Message,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [ValidateSet('Information','Warning','Error')]
        [string]$Severity = 'Information'
    )
    # get the content of the file so far (if any) and skip the headers
    $oldData = Get-Content -Path $LogFilePath -ErrorAction SilentlyContinue | Select-Object -Skip 1
    # overwrite the file with this entry
    [pscustomobject]@{
        Time = (Get-Date -f g)
        Message = $Message
        Severity = $Severity
    } | Export-Csv -Path $LogFilePath -NoTypeInformation
    # append the older data to it
    if ($oldData) { $oldData | Add-Content -Path $LogFilePath }
}

$LogFilePath = 'D:\test.csv'
Write-Log -Message 'First message: all is well'
Write-Log -Message 'Second message: attention please' -Severity Warning
Write-Log -Message "Third message: something bad happened" -Severity Error

Результат:

"Time","Message","Severity"
"5-3-2020 16:24","Third message: something bad happened","Error"
"5-3-2020 16:24","Second message: attention please","Warning"
"5-3-2020 16:24","First message: all is well","Information"

Я работаю в голландской системе, поэтому временная метка в вашем случае может выглядеть иначе

0 голосов
/ 05 марта 2020

Если вы хотите замедлить ваш процесс, вы можете каждый раз переписывать файл, заменяя export-csv на set-content:

Set-Content -Value ($_+(Get-Content $LogFilePath )) -Path $LogFilePath

Но вы должны убедиться, что filepath существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...