Доброго времени суток, $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
}
}
}
}
У этого примера есть только один недостаток — она «синхронная», то есть не обрабатывает проблемы одновременной записи в лог-файл. Кто знает как это изменить, прошу в комменты.