# Имя файла лога отличается от имени скрипта только расширением
$ScriptPath=(Get-Item $PSCommandPath).Directory
$ScriptBaseName=(Get-Item $PSCommandPath).BaseName
$LogFile="$ScriptPath\$ScriptBaseName.log"
$whatif=$false
# простенькая функция логирования, если файл есть, то пишет в него
# можно было использовать tee-object, но этот командлет выдает ошибку при отсутствии папки для лога
# CheckRepeat проверяет последнюю строку лога с будущей, чтобы не засорять файл
# level - число -
function Logging($Message,$Level=0,$CheckRepeat=$false){
if ("$Message" -eq ""){
return
}
$mLevel=switch($level){
0 {New-Object psobject -Property @{label="[INF]";color="White"}}
1 {New-Object psobject -Property @{label="[WAR]";color="Yellow"}}
2 {New-Object psobject -Property @{label="[ERR]";color="Red"}}
}
$CurrentTimeStamp=Get-Date -Format "dd.MM.yyyy`tHH:mm:ss"
Write-Host "$Message" -ForegroundColor $mLevel.color
if ($whatif){return}
if (-not (Test-Path $LogFile)) {New-Item -Path $LogFile -ItemType File -ErrorAction SilentlyContinue}
if (Test-Path $LogFile) {
$lastLine=""
if ($CheckRepeat){
$lastLine=$(Get-Content -Path $LogFile)[-1].Split("`t")[-1]
}
if ("$Message" -ne "$lastLine"){
Write-Output("$CurrentTimeStamp`t$($mLevel.label)`t$Message") | Out-File $LogFile -Append
}
}
}
Комментариев нет:
Отправить комментарий