Доброго времени суток, $username!
Хочу поделиться с вами функцией, которую я использую вместо обычного вывода информации на экран или только записи в файл.
Функция была написана для того, чтобы информация выводилась и на экран и в лог (текстовый), предназначается для замены стандартного write-host.
Из вкусностей:
Функция объявлена глобально, это значит что в пределах одной сессии достаточно один раз ее проиницилизировать — читай запустить файл с ней.
Варианты использования:
Количество ошибок и предупреждений (за всю сессию или до ручного обнуления переменных) хранятся в $errorcount и $warningcount.
Лично у меня эта функция храниться в файле set-functions.ps1, и в скриптах я ее вызываю так:
Cамое начало любого (там где это необходимо) моего скрипта:
Тело функции write-log:
У этого примера есть только один недостаток — она «синхронная», то есть не обрабатывает проблемы одновременной записи в лог-файл. Кто знает как это изменить, прошу в комменты.
Хочу поделиться с вами функцией, которую я использую вместо обычного вывода информации на экран или только записи в файл.
Функция была написана для того, чтобы информация выводилась и на экран и в лог (текстовый), предназначается для замены стандартного write-host.
Из вкусностей:
- Точная дата и время событ��я
- Тип события
- Подсчет ошибок и предупреждений
- Вывод информации цветом (в зависимости от типа события)
- Формат лога совместим с CSV ([TAB] separated)
Функция объявлена глобально, это значит что в пределах одной сессии достаточно один раз ее проиницилизировать — читай запустить файл с ней.
Варианты использования:
write-log "Hello Хабр!"
14.07.2011 00:22:15 info Hello Хабр!
write-log -message "Hello Хабр!" -type warning
write-log -message "Hello Хабр!" -type error -silent
Правда, путь должен существовать:
write-log -message "Hello Хабр!" -type CustomType logfile c:\enter\your\path\here.log
Количество ошибок и предупреждений (за всю сессию или до ручного обнуления переменных) хранятся в $errorcount и $warningcount.
Лично у меня эта функция храниться в файле set-functions.ps1, и в скриптах я ее вызываю так:
Cамое начало любого (там где это необходимо) моего скрипта:
$ver="0.1" $ProgrammName="SomeScriptName" try { # Функция вывода информации на экран и записи в лог ./Set-Functions.ps1 #Инициализация функций $global:logfilename = "log`\"+ $ProgrammName +".log" write-log "$ProgrammName (ver $ver) started." } catch { return "Error loading functions Set-Functions.ps1" }
Тело функции write-log:
$ver = "0.4" $dt=Get-Date -Format "dd-MM-yyyy" New-Item -ItemType directory log -Force | out-null #Создаю директорию для логов $global:logfilename="log\"+$dt+"_LOG.log" [int]$global:errorcount=0 #Ведем подсчет ошибок [int]$global:warningcount=0 #Ведем подсчет предупреждений function global:Write-log # Функция пишет сообщения в лог-файл и выводит на экран. {param($message,[string]$type="info",[string]$logfile=$global:logfilename,[switch]$silent) $dt=Get-Date -Format "dd.MM.yyyy HH:mm:ss" $msg=$dt + "`t" + $type + "`t" + $message #формат: 01.01.2001 01:01:01 [tab] error [tab] Сообщение Out-File -FilePath $logfile -InputObject $msg -Append -encoding unicode if (-not $silent.IsPresent) { switch ( $type.toLower() ) { "error" { $global:errorcount++ write-host $msg -ForegroundColor red } "warning" { $global:warningcount++ write-host $msg -ForegroundColor yellow } "completed" { write-host $msg -ForegroundColor green } "info" { write-host $msg } default { write-host $msg } } } }
У этого примера есть только один недостаток — она «синхронная», то есть не обрабатывает проблемы одновременной записи в лог-файл. Кто знает как это изменить, прошу в комменты.