Запись выходных данных в файлы журнала в сценарии PowerShell

Вы можете использовать простые текстовые файлы журнала для контроля выполнения и отслеживания всех действий в ваших сценариях PowerShell. Это полезно при отладке ошибок или аудите действий сценария. В этой статье мы покажем несколько способов использования протоколирования в сценариях PowerShell путем записи вывода в текстовые файлы журнала.

В простейшем случае, если вы хотите записать вывод информационного сообщения или результат выполнения команды PowerShell в текстовый файл журнала, вы можете использовать один из следующих форматов для перенаправления вывода PS в текстовый файл:

Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt –Append

Во всех случаях команды добавляют в TXT-файл новую строку с указанным вами текстом.

Если вы хотите каждый раз перезаписывать содержимое файла журнала, используйте команду Set-Content команду.

Запись вывода PowerShell в текстовый файл

Основной недостаток этого метода заключается в том, что вы не можете определить, когда запись была записана в журнал (произошло событие). Вы можете добавить текущую временную метку в файл журнала. Это поможет определить время, когда был запущен скрипт и произошло конкретное событие.

Чтобы сделать это более удобным, можно создать отдельную функцию в сценарии PowerShell, которая будет записывать полученные данные в файл журнала и добавлять временную метку для каждого события.

Вы можете создать функцию, как показано ниже:

$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}

Затем вызовите функцию WriteLog если вы хотите записать что-то в журнал.

WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"

Теперь вы можете видеть время каждой записи в файле журнала.

powershell создание файла журнала с временной меткой

Вы можете заменить Write-Host вызовы на LogWrite в вашем скрипте.

PowerShell имеет встроенную функцию транскрипции для сохранения всех команд и результатов, отображаемых в консоли PS, в текстовый файл журнала.

Чтобы записать в журнал текущий сеанс PowerShell, можно воспользоваться командой Start-Transcript используется команда Start-Transcript.

После выполнения команды появляется сообщение, в котором указывается файл, в который записывается вывод всех команд. По умолчанию файл журнала находится в профиле текущего пользователя:

Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txt
Вы можете указать путь к текстовому файлу следующим образом:

Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt

[-Добавить опция указывает, что новые сессии будут записываться в конец файла (без его перезаписи).

Выполните несколько команд PowerShell, которые выводят результаты на консоль. Например, выведем список запущенных процессов, служб и состояние репликации AD:

Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01

Остановите ведение журнала для текущего сеанса PowerShell:

Stop-Transcript

Затем откройте файл журнала транскрипции.

PowerShell_transcript log file - запись сеанса в текстовый файл

Как видите, в журнале отображается вся история команд PowerShell, которые были запущены в консоли, и все выходные данные.

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

Вы можете использовать Start-Transcript и Stop-Transcript Команды в сценариях PowerShell, чтобы в естественном режиме регистрировать все действия и результаты.

Использование параметра групповой политики Включить транскрипцию PowerShell (Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Windows PowerShell), вы можете включить автоматическое протоколирование всех запущенных команд PowerShell и их вывода на компьютере. После обновления параметров GPO на компьютере для каждого запущенного процесса powershell.exe будет создан отдельный текстовый файл журнала, в который будут записываться все команды PS и их выходные данные.
Опция GPO: Включить транскрипцию PowerShell

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *