Ви можете використовувати прості текстові лог файли для контролю запуску і відстеження всіх дій, які виконуються при запуску PowerShell скриптів. Це зручно при налагодженні помилок, для аудиту виконаних скриптом дій. У цій статті ми розглянемо кілька способів ведення текстових лог-файлів для ваших PowerShell скриптів.

У найпростішому випадку, якщо вам потрібно записати висновок інформаційного повідомлення або результатів певної PowerShell команди в текстовий лог файл, ви можете використовувати один з наступних форматів перенаправлення виведення в txt файл:

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

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

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

У всіх випадках команди додають в зазначений текстовий файл новий рядок c зазначеним вами текстом.

Якщо вам потрібно кожен раз перезатірать вміст ло-файлу, використовуйте Set-Content.

Add-Content запис інформації з скрипта powershell в лог

Головний недолік такого методу – за таким лог файлу можна визначити, коли була внесена та чи інша запис в лог (відбулася подія). Ви можете додати в лог поточну мітку дати, часу (timestamp). Це допоможе легко ідентифікувати час запуску скрипта і конкретного події в ньому.

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

Можна зробити функцію:

$Logfile = "C:PSLogsproc_$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 "Скрипт выполнен успешно"

Тепер в лог файлі міститься час, коли було зроблено запис.

функція ведення тектових лог файлу з міткою часу в powershell

Можете замінити в своєму скрипті виклики Write-host на LogWrite.

У PowerShell також є вбудована можливість зберігати в текстовий лог файл все команди і результати, які виводяться в консоль PS.

Щоб почати запис поточної PowerShell сесії, використовується командлет Початок-розшифровка.

Після запуску цієї команди з’являється повідомлення, в якому зазначено, в який файл зберігаються результати всіх команд. За замовчуванням лог файл пишеться в профіль поточного користувача:

Transcript started, output file is C:UsersAdministratorDocumentsPowerShell_transcript.DC01.inhP7egx.20210315041442.txt
Можна вказати шлях до текстового файлу так:

Start-Transcript -Append C:PSLogsPSScriptLog.txt

параметр –Додати вказує, що потрібно дописувати нові сесію в кінець лог файлу (НЕ перезатірать його).

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

Get-Process| where-object {$_.WorkingSet -GT 300000*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 DC01

Start-Transcript - ведення повного логу дій для powershell скрипта

Завершіть запис сесії для поточної сесії:

Stop-Transcript

Тепер відкрийте текстовий файл з балкою.

приклад балки всіх дій в powershell

Як ви бачите, в текстовому балці відображаються вся історія PowerShell команд, які запускалися в скрипті і весь висновок, який виводився в консоль.

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

Ви можете використовувати Start-Transcript / Stop-Transcript в своїх PowerShell скриптах щоб нативної Залогуватися всі дії і результати.

За допомогою групової політики Увімкніть транскрипцію PowerShell в Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell можна включити автоматичне логирование всіх запускаються PowerShell команд і виведених результатів на комп’ютері. Після оновлення налаштувань GPO на комп’ютері, для кожного запущеного процесу powershell.exe буде створюватися окремий тектових лог файл, куди будуть записуватися всі PS команди і результати результати.

Групова політика Turn on PowerShell Transcription

Leave a Reply

Your email address will not be published. Required fields are marked *