How to Build a Logging Function in PowerShell

Hoe bouw je een logboekfunctie in PowerShell?

Het bijhouden van wat een script doet, is van cruciaal belang voor monitoring en debugging / foutopsporing.

Het bewaken van een script kan op veel verschillende manieren, maar het is meestal afhankelijk van hoe het wordt uitgevoerd. Als een script interactief wordt aangeroepen, betekent dit rechtstreeks vanuit de console met behulp van technieken zoals Write-Verbose, Write-Information of Write-Host. Dit is handig omdat elke opdracht berichten op de console kan weergeven als het script loopt. Maar wat als dit script wordt aangeroepen door een geplande taak of een ander proces waarbij geen mens naar een scherm staart terwijl het wordt uitgevoerd? In dit geval moeten we een ander niveau van monitoring  toepassen. Een uitstekende manier om een script te controleren dat niet interactief wordt uitgevoerd, is door het naar een logboek te schrijven.

Er zijn een paar verschillende manieren om tekst naar een logboekbestand te schrijven in PowerShell en de aanpak die wordt gebruikt, is volledig aan de scripter. Voordat je echter begint met het maken van jouw eigen logboekfunctie, zijn er een paar dingen om in gedachten te houden.

  • Alle logboekbestandsregels moeten gestructureerde inhoud zijn.
  • De tijd moet voor elke logboekvermelding worden geregistreerd.
  • Tags worden aanbevolen om informatie in het logboekbestand later snel te kunnen filteren.

Laten we eens kijken hoe we een PowerShell functie kunnen bouwen om in een van onze scripts op te nemen. Omdat deze functie beschikbaar moet zijn voor verschillende scripts, gaan we een PS1-script maken om onze functie op te slaan. De naam van de functie Write-log zijn.

Write-Log.ps1

function Write-Log 

Met deze logboekfunctie schrijft u elke keer dat het wordt aangeroepen één regel naar het logboekbestand. Elke regel in het logboek heeft twee kenmerken die veranderen afhankelijk van wat ik wil opnemen; bericht en ernst, dus ik zal die toevoegen als parameters naar onze functie.

function Write-Log 

Merk op dat ik ervoor heb gekozen om de waarde van de parameter Severity te beperken tot drie keuzes. Door de opties te beperken, zorgt het ervoor dat ik erop kan vertrouwen dat dit veld altijd een van de drie verschillende waardes heeft en dat ik er op kan filteren. Zodra ik de parameters heb uitgewerkt, gebruik ik CSV om een gestructureerd logboekbestand te maken. Dit zorgt ervoor dat ik het logbestand snel kan opvragen in een spreadsheet programma en indien nodig door de gegevens kan kijken. Kennisgeving hieronder dat ik ook de tijd heb toegevoegd. Dit is geen parameter omdat dit altijd het moment is dat de functie is uitgevoerd.

function Write-Log 

Dat is alles wat er is aan onze Write-Log functie. We kunnen dit nu toevoegen aan elk script dat we leuk vinden, zolang we het eerst in een dot-source zetten. Als het script Write-Log.ps1 zich in dezelfde map bevond als het script waaruit we het aanroepen; we zouden het zo kunnen dot-sourcen:

Script.ps1

. "$PSScriptRootWrite-Log.ps1

Zodra het script op de hoogte is van de functie, kan het zo vaak worden aangeroepen als nodig is in een script.

$foo = $false
 if ($foo) 

De informatie wordt dan naar het logbestand geschreven, dat er als volgt uitziet:

PS> Import-Csv "$env:TempLogFile.csv" Time              Message        Severity ----              -------        -------- 5/13/2017 2:19 PM Foo was $false Error

 

Tags

Start nu met WhatsUp Gold

Comments
Comments are disabled in preview mode.