Всем привет.
После приятного знакомства с MS SCCM приходится таскать с собой просмотрщик логов CMTrace. Эта утилита из пакета MS SCCM Client Tools предназначена для просмотра логов работы SCCM типов которых может быть до сотни. Оказалось что CMTrace также готов показывать и логи от других программных комплексов. Готов он, в общем то, парсить любой текстовый файл построчно.
При этом надо учесть что не будет у вас красивого названия колонок, даже если они будут в самом файле. Также CMTrace реагирует на слова типа "fail" или "error" подсветкой красным цветом всей строки, а на слово "warning" соответственно желтым. В русском переводе реакции на слова не будет.) Но любое другое слово можете подсветить любым цветом используя встроенный фильтр. За что собственно мы его и любим. Простенько и бесплатно.
Один фанат сего попытался даже Powershell скрипт написать чтобы можно было любые данные писать в формате удобочитаемым утилитой CMTrace. Все построено на вызове двух функций Start-Log и Write-Log. Пример их использования внизу. Меня не впечатлило. Я ожидал консольного парсера который может взять любой текстовый файл из сделать из него лог в духе MS SCCM. За основу брать можно, но допиливать надо. Но что есть то есть.
Function Start-Log {
[CmdletBinding()]
param (
[ValidateScript({ Split-Path $_ -Parent | Test-Path })]
[string]$FilePath
)
try
{
if (!(Test-Path $FilePath))
{
## Create the log file
New-Item $FilePath -Type File | Out-Null
}
## Set the global variable to be used as the FilePath for all subsequent Write-Log
## calls in this session
$global:ScriptLogFilePath = $FilePath
}
catch
{
Write-Error $_.Exception.Message
}
}
Function Write-Log {
param (
[Parameter(Mandatory = $true)]
[string]$Message,
[string]$Context,
[Parameter()]
[ValidateSet(1, 2, 3)]
[int]$LogLevel = 1
)
$TimeGenerated = "$(Get-Date -Format HH:mm:ss).$((Get-Date).Millisecond)+000"
$Line = '<![LOG[{0}]LOG]!><time="{1}" date="{2}" component="{3}" context="{6}" type="{4}" thread="" file="{5}">'
$LineFormat = $Message, $TimeGenerated, (Get-Date -Format MM-dd-yyyy), "$($MyInvocation.ScriptName):$($MyInvocation.ScriptLineNumber)", $LogLevel, $FilePath, $Context
$Line = $Line -f $LineFormat
Add-Content -Value $Line -Path $ScriptLogFilePath
}
А так это работает.
Start-Log -FilePath d:\Cleanup.log
Write-Host "Script log file path is [$ScriptLogFilePath]"
Write-Log -Message 'Warning' -LogLevel 2
Write-Log -Message 'Error' -LogLevel 3
Write-Log -Message 'simple activity'
Write-Log -Message 'simple activity'
Write-Log -Message 'simple activity' -Context "It's stable state"
В результате файл Cleanup.log в CMTrace сияет всеми цветами радуги).
No comments:
Post a Comment
А что вы думаете по этому поводу?