Эта функция используется для записи логов в формате JSON. Функция принимает несколько параметров:
$logpath
— строка, указывающая путь к директории, в которой будут храниться логи;$Message
— строка, содержащая сообщение для записи в лог;$logname
— строка, указывающая имя файла лога;$Result
— строка, указывающая результат выполнения скрипта («ERROR», «Warning», «Success»);$PathConfig
— необязательная строка, содержащая путь к конфигурационному файлу;$OldValue
— необязательная строка, содержащая старое значение;$NewValue
— необязательная строка, содержащая новое значение;$e_error
— необязательная строка, содержащая текст ошибки.
Сначала функция проверяет, существует ли директория для хранения логов. Если директория не существует, она создается. Затем функция создает новую запись лога с помощью хэш-таблицы, содержащей информацию о времени записи, сообщении, пути к конфигурационному файлу (если он указан), старом и новом значениях (если они указаны), тексте ошибки (если он указан) и результате выполнения скрипта.
Далее функция проверяет, есть ли уже записи в логе. Если записей нет, создается новый объект лога, в котором содержится информация о имени сервера, имени скрипта и пустом массиве ConfigDataLog
. Если в логе уже есть записи, текущий лог загружается в переменную $CurrentLog
.
Затем функция добавляет новую запись лога в массив ConfigDataLog
текущего лога и сохраняет его в файле JSON, перезаписывая предыдущие записи лога.
Если переменная $Env:DelLog
равна 0, то перед сохранением текущего лога функция удаляет файл предыдущего лога, чтобы не было дубликатов записей. Если $Env:DelLog
равна 1, то удаление предыдущего лога уже было выполнено.
$Env:DelLog = 0; # переменная нужна, если нужно удалить логи при первом запуске скрипта
function Add-WriteLog {
param (
[ValidateNotNullOrEmpty()] [Parameter(Mandatory=$True)] [string] $logpath,
[Parameter(Mandatory=$True)] [string] $Message,
[ValidateNotNullOrEmpty()] [Parameter(Mandatory=$True)] [string] $logname,
[ValidateSet("ERROR", "Warning", "Success")] [Parameter(Mandatory=$True)] [string] $Result,
[string] $PathConfig = "",
[string] $OldValue = "",
[string] $NewValue = "",
[string] $e_error = ""
)
#Create log folder
$logpathname = "$logpath\$logname.json";
$testlogpath=Test-Path -Path $logpath
if (!$testlogpath) {
New-Item -Path $logpath -ItemType "directory";
}
else {
if ($Env:DelLog -eq 0) {
Remove-Item -Path $logpathname -ErrorAction Ignore
$Env:DelLog = 1
}
}
$date = "$(Get-Date -Format dd-MM-yyyy)";
$time = "$(Get-Date -Format HH:mm:ss)" ;
$Time_Stamp = $date +" "+ $time;
$NewLogData = [Ordered] @{
'Time' = $Time_stamp;
'Message' = $Message;
'PathConfig' = $PathConfig;
'OldValue' = $OldValue;
'NewValue' = $NewValue;
'Error' = $e_error;
'Result' = $Result;}
$CurrentLog = Get-Content -Path $logpathname -Raw -ErrorAction Ignore | ConvertFrom-Json;
#If the log file is empty, CurrentLog cannot have a method called as it's 'Null Valued'.
#Test for Null Value, if true, create CurrentLog as an Object
if (([string]::IsNullOrEmpty($CurrentLog)))
{
$CurrentLog = @{
'ServerName' = $Env:Computername;
'ScriptName' = $logname;
'ConfigDataLog' = @();
}
}
$CurrentLog.ConfigDataLog += $NewLogData
$CurrentLog | ConvertTo-Json | Out-File $logpathname;
}
# На выходе получаем json:
{
"ServerName": "COMP01",
"ScriptName": "DetailService",
"ConfigDataLog": [
{
"Time": "26-01-2021 15:24:54",
"Message": "Startup script",
"PathConfig": "",
"OldValue": "",
"NewValue": "",
"Error": "",
"Result": "Success"
},
{
"Time": "26-01-2021 15:24:54",
"Message": "File 22.ps1 found",
"PathConfig": "",
"OldValue": "",
"NewValue": "",
"Error": "",
"Result": "Success"
},
{
"Time": "26-01-2021 15:24:54",
"Message": "Get content success",
"PathConfig": "C:\\Scripts\\00\\DOC\\config\\Web.config",
"OldValue": "",
"NewValue": "",
"Error": "",
"Result": "Success"
},
{
"Time": "26-01-2021 15:24:54",
"Message": "xPath exist",
"PathConfig": "C:\\Scripts\\00\\DOC\\config\\Web.config",
"OldValue": "",
"NewValue": "",
"Error": "",
"Result": "Success"
},
{
"Time": "26-01-2021 15:24:54",
"Message": "xPath changed!",
"PathConfig": "C:\\Scripts\\00\\DOC\\config\\Web.config",
"OldValue": "olduser",
"NewValue": "newuser",
"Error": "",
"Result": "Success"
},
{
"Time": "26-01-2021 15:24:54",
"Message": "Save config and stop script",
"PathConfig": "C:\\Scripts\\00\\DOC\\config\\Web.config",
"OldValue": "",
"NewValue": "",
"Error": "",
"Result": "Success"
}
]
}