A naplózó modul függvényei

Nézzük tehát a PSM1 fájl tartalmát! A fájlom neve ScriptTools.psm1 lesz, mert nem feltétlenül csak a naplózáshoz szükséges függvények lesznek benne, hanem betehetjük például a konfigurációs fájlok beolvasásához használt ParseConfig függvényt is és még egyebeket is. Itt picit csalok, mert én már tudom, hogy hova fogok eljutni, így a függvények váza már többnyire tartalmazza a paramétereket is:

function Initialize-Logging {

[CmdletBinding()]

param(

    [string] $title,

    [string] $path,

    [int]    $keepdays = 60

)

}

Az Initialize-Logging függvény fogja majd megnyitni a naplóállományt a $path mappában. Nyitáskor teszünk majd bele egy szépen keretezett fejlécet a futtatással kapcsolatos információkkal és a $title szöveggel, ami leírja, hogy mire való a szkript. A naplófájl neve tartalmazza majd a dátumot is, így naponta új fájlba kerülnek a naplóbejegyzések. A régebbi naplófájlok törlését is majd az inicializálás közben fogjuk megtenni $keepdays nap eltelte után.

function New-LogFile {

param(

    [string] $name,

    [string] $path,

    [int]    $keepdays = 60,

    [switch] $byseconds,

    [switch] $overwrite

)

   

}

A naplófájlt ténylegesen a New-LogFile függvény fogja végezni az Initialize-Logging függvényből meghívva. Ebből azért csináltam egy külön függvényt, mert sokszor van olyan helyzet, hogy valamilyen fájlt kell megnyitni a szkriptünkből, például egy CSV fájl, hogy adatainkat kiexportálhassuk. Ennek a CSV fájlnak a kezelése is teljesen hasonló a naplófájlokéhoz, azaz valamilyen dátumhoz tartozó fájlt létre kell hozni, a régieket meg ki kell törölni. A $name a fájl neve a dátum nélkül, azaz például ha „adatok.csv”-t adunk meg, akkor a rényleges fájlnév majd adatok-20230212.csv lesz. Kivéve, ha a $byseconds kapcsolót használjuk, mert akkor a tényleges név adatok-20230212051652.csv lesz. Ennek ugye az az értelme, hogy a napon belüli többszöri futtatás is mind külön fájlt fog eredményezni. Az $overwrite kapcsolóval, ha már van egy ugyanolyan nevű fájl, akkor az felülírja egy üres fájllal.

function FormatBorder {

param(

    [Parameter(ValueFromPipeline=$true)][string[]]$strings,

    [string] $title

)

}

A FormatBorder segédfüggvény, azaz nem fogjuk exportálni a modulból, ezért a neve sem szabványos. Az exportálandó függvények nevei mind Ige-LogValami sémára épülnek. Az Initialize-Logging-nál kicsit csaltam, mert ott a „valami” az a „ging” lett.

Szóval a FormatBorder az a belé töltött $strings-eket és az opcionális $title szöveget szépen körbeveszi „#” karajterekből álló kerettel.

function Format-LogStringList {

param(

    [Parameter(ValueFromPipeline = $true)]$object,

    [string[]] $property = "*",

    [string[]] $excludeproperty = $null,

    [switch] $divide,

    [int] $indentlevel

)

}

A Format-LogStringList egy vagy több $object kiválasztott tulajdonságaiból ($property), illetve kizárt tulajdonságokkal ($excludeproperty) készít egy listát. Ha használjuk a $divide kapcsolót, akkor az egyes objektumok listái közé egy „-„ jelekből álló elválasztó vonalat fog beilleszteni. Az $indetlevel segítségével „behúzással”, azaz ennyiszer 4 darab szóközzel jobbra tolva lesz a lista.

function Format-LogStringTable {

param(

    [Parameter(ValueFromPipeline = $true)]$object,

    [string[]] $property = $null   

)

}

A Format-LogStringTable meg az $object-ben megadott objektumokból táblázatot készít a $property-re illeszkedő tulajdonságokkal. Itt a $null alapérték onnan jön, hogy a függvény belsejében alkalmazott Format-Table-nek ha $null-t adunk a -property paraméterként, akkor az alaphelyzet szerinti tulajdonságok leszenek, azaz azok, amik a különböző format.xml fájlokban elő vannak írva az alapesetre.

function New-LogEntry {

[cmdletbinding()]

param(

    [Parameter(ValueFromPipeline = $true)] [string] $message,

    [Parameter()][ValidateSet('Info', 'Highlight', 'Warning', 'Error', 'Exit', 'Terminate', 'Unhandled', 'Progress')]$type = 'Info',

    [int] $indentlevel,

    [switch] $nonewline,

    [switch] $displayonly

)

 

}

A New-LogEntry fogja majd a tényleges naplóbejegyzéseket beírni a naplófájlba. A lényegi üzenet a $message paraméterben lesz, majd megadhatjuk, hogy milyen típusú lesz a bejegyzés, ami lehet információ (Info), kiemelt információ (Highlight), figyelmeztetés (Warning), hiba (Error), normális kilépés (Exit), súlyos hibából fakadó kilépés (Terminate), váratlan hiba (Unhandled) és előrehaladás (Progress). Itt is beállítható az $indentlevel segítségével a behúzás, a $nonesline kapcsoló használatával a következő logbejegyzés még ugyanebbe a sorba kerül. Lehetnek olyan bejegyzések, amelyek inkább akkor érdekesek, ha kézzel futtatjuk a szkriptet és nézzük hogyan születnek a naplóbejegyzések, de nem kell őket a fájlban megőrizni az utókor számára, ekkor használjuk a $displayonly kapcsolót.



Word To HTML Converter