Главная

Thursday, 24 May 2018

CMTrace как простой парсер логов от MS SCCM.

Всем привет.

После приятного знакомства с 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

А что вы думаете по этому поводу?