Как вывод скрипта PowerShell записать в файлы журнала


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

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

Write-Output "Файлы успешно созданы в $env:computername" >> C:\PS\Logs\TestLog.txt

Смотрите также: Аналог echo в PowerShell

Или:

Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Файлы успешно созданы в $env:computername"

Смотрите также: Командлеты Set-Content и Add-Content для обработки строк

Или:

"Файлы успешно созданы в $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt -Append

Смотрите также: Как в PowerShell сохранить вывод в файл (аналоги > и »)

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

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


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

Чтобы сделать ведение логов более удобным, вы можете создать отдельную функцию в своём скрипте 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 "Скрипт запущен”
WriteLog "Вычисление…."
Start-Sleep 20
WriteLog "Скрипт успешно выполнен"

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

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


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

Для регистрации текущего сеанса PowerShell используется командлет 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

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

Выполните несколько команд 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, которые были запущены в консоли, и весь их вывод.

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

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

Используя параметр групповой политики «Включить транскрипции PowerShell» (в английской версии Windows он называется Turn on PowerShell Transcription) вы можете включить автоматическое ведение журнала всех выполняемых команд PowerShell и их вывода на компьютер. После обновления настроек GPO на компьютере для каждого запущенного процесса powershell.exe будет создан отдельный текстовый файл журнала, и будут регистрироваться все команды PS и их выходные данные.

Чтобы открыть редактор локальной групповой политики выполните:

GPEDIT

Вы найдёте этот пораметр по пути Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Windows PowerShell, или для английской версии по пути Computer Configuration → Administrative Templates → Windows Components → Windows PowerShell.

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


Рекомендуется Вам:

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

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