Как вывод скрипта 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 и их выходные данные.
Связанные статьи:
- Как в PowerShell сохранить вывод в файл (аналоги > и >>) (100%)
- Аналог echo в PowerShell (100%)
- Как в PowerShell менять набор выводимых по умолчанию данных (100%)
- Как выводить данные без таблицы в PowerShell (100%)
- В PowerShell таблица не помещается на экран — как исправить (РЕШЕНО) (100%)
- Аналоги cat, tail, head и wc в PowerShell (RANDOM - 50%)