Powershell.Написать журналы событий - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть скрипт, который перемещает некоторые файлы из папки во временную папку, архивирует их и очищает временную папку в конце.

Я хочу, чтобы мой скрипт также записывал информацию об этом в журнал событий win.

Вот мой скрипт:

Get-ChildItem C:\Users\Administrator\Desktop\test1\ | Where-Object {$_.LastWriteTime -lt "09/24/2018 09:00 PM"} | Move-Item -Destination C:\Users\Administrator\Desktop\data\
Compress-Archive -path C:\Users\Administrator\Desktop\data\ -CompressionLevel Optimal -DestinationPath C:\Users\Administrator\Desktop\data1\test.zip
Remove-Item C:\Users\Administrator\Desktop\data\*

Я хочу добавить код, который будет записывать событие для любой ошибки в журнал событий win.

1 Ответ

0 голосов
/ 27 сентября 2018

В комментариях вы можете использовать Write-EventLog для записи в журналы событий Windows.Если вы хотите записать какие-либо ошибки, возникающие во время этих команд, вы, вероятно, захотите использовать Try..Catch для перехвата любых ошибок и их обработки:

Try {
    $PrevEAP = $ErrorActionPreference
    $ErrorActionPreference = 'Stop'

    Get-ChildItem C:\Users\Administrator\Desktop\test1\ | Where-Object {$_.LastWriteTime -lt "09/24/2018 09:00 PM"} | Move-Item -Destination C:\Users\Administrator\Desktop\data\
    Compress-Archive -path C:\Users\Administrator\Desktop\data\ -CompressionLevel Optimal -DestinationPath C:\Users\Administrator\Desktop\data1\test.zip
    Remove-Item C:\Users\Administrator\Desktop\data\* 
Catch {
    Write-Error $_

    $ErrorEvent = @{
        LogName = 'Application'
        Source = 'YourScript'
        EventID = 123
        EntryType = 'Information'
        Message = $_
    }
    Write-EventLog @ErrorEvent
}
Finally {
    $ErrorActionPreference = $PrevEAP
}

Для того, чтобы исключение (ошибка) сработалоTry..Catch исключение должно быть завершено (по сравнению с прекращением).Вы можете заставить командлеты делать ошибки завершения, установив для командлетов -ErrorAction значение Stop, или вы можете сделать это глобально с помощью переменной $ErrorActionPreference.

В блоке перехвата ошибка удерживается вспециальная переменная: $_.Таким образом, мы можем использовать Write-Error для записи в консоль (если хотите), а затем мы используем Write-EventLog для записи в журнал событий.

Настройка LogName, Source, EventID, Информация и т. Д. В соответствии с вашими потребностями.Примечание. LogName должен быть одним из существующих журналов, а тип записи должен быть одним из допустимых типов записей (Информация, Предупреждение, Ошибка).

...