Эта функция используется для записи логов в формате JSON. Функция принимает несколько параметров:
$logpath
— строка, указывающая путь к директории, в которой будут храниться логи;$Message
— строка, содержащая сообщение для записи в лог;$logname
— строка, указывающая имя файла лога;$Result
— строка, указывающая результат выполнения скрипта («ERROR», «Warning», «Success»);$PathConfig
— необязательная строка, содержащая путь к конфигурационному файлу;$OldValue
— необязательная строка, содержащая старое значение;$NewValue
— необязательная строка, содержащая новое значение;$e_error
— необязательная строка, содержащая текст ошибки.
Сначала функция проверяет, существует ли директория для хранения логов. Если директория не существует, она создается. Затем функция создает новую запись лога с помощью хэш-таблицы, содержащей информацию о времени записи, сообщении, пути к конфигурационному файлу (если он указан), старом и новом значениях (если они указаны), тексте ошибки (если он указан) и результате выполнения скрипта.
Далее функция проверяет, есть ли уже записи в логе. Если записей нет, создается новый объект лога, в котором содержится информация о имени сервера, имени скрипта и пустом массиве ConfigDataLog
. Если в логе уже есть записи, текущий лог загружается в переменную $CurrentLog
.
Затем функция добавляет новую запись лога в массив ConfigDataLog
текущего лога и сохраняет его в файле JSON, перезаписывая предыдущие записи лога.
Если переменная $Env:DelLog
равна 0, то перед сохранением текущего лога функция удаляет файл предыдущего лога, чтобы не было дубликатов записей. Если $Env:DelLog
равна 1, то удаление предыдущего лога уже было выполнено.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
$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; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# На выходе получаем 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" } ] } |