Ви можете використовувати прості текстові лог файли для контролю запуску і відстеження всіх дій, які виконуються при запуску 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.
Головний недолік такого методу – за таким лог файлу можна визначити, коли була внесена та чи інша запис в лог (відбулася подія). Ви можете додати в лог поточну мітку дати, часу (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 "Скрипт выполнен успешно"
Тепер в лог файлі міститься час, коли було зроблено запис.
Можете замінити в своєму скрипті виклики 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
Завершіть запис сесії для поточної сесії:
Stop-Transcript
Тепер відкрийте текстовий файл з балкою.
Як ви бачите, в текстовому балці відображаються вся історія PowerShell команд, які запускалися в скрипті і весь висновок, який виводився в консоль.
В лог файл потрапляють в тому числі всі помилки і попередження, що буває вкрай зручно при діагностиці та налагодженні складних PowerShell скриптів.
Ви можете використовувати Start-Transcript / Stop-Transcript в своїх PowerShell скриптах щоб нативної Залогуватися всі дії і результати.