
Вы можете использовать простые текстовые файлы журнала для контроля выполнения и отслеживания всех действий в ваших сценариях 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, которая будет записывать полученные данные в файл журнала и добавлять временную метку для каждого события.
Вы можете создать функцию, как показано ниже:
$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"
Теперь вы можете видеть время каждой записи в файле журнала.
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, которые были запущены в консоли, и все выходные данные.
Вы можете использовать Start-Transcript
и Stop-Transcript
Команды в сценариях PowerShell, чтобы в естественном режиме регистрировать все действия и результаты.