Dopo aver cominciato il thread [1] delle scorse settimane, ho pensato fosse opportuno spendere qualche minuto in più per produrre una libreria separata per il logging con l’opportunità che essa possa essere riutilizzata anche in altri contesti. Essendo infatti il logging concettualmente un’azione riutilizzabile più e più volte in mille contesti distinti sarebbe bello che questa funzionalità stesse in un file separato e che fosse richiamabile semplicemente includendola nel contesto in cui mi serve.
Per questa ragione creo un un file ps1 separato che chiamerò XinLog in cui isolerò tutte le logiche relative al logging:
################# XinLog 1.0 ######################
# Use this library to log easely on file and screen
# In Parameters MANDATORY
# - $LogString [STRING] Message to log
# The log on file will create file a file in the same directory of the caller
###################################################
# Get the current Directory
$myDir = Split-Path -Parent $MyInvocation.MyCommand.Path
#Set the file log name
$Logfile = "$myDir\XinLog_$($env:computername)_$((Get-Date).toString("yyyyMMdd_HHmmss")).log"
#begin FUNCTIONS
function Write-Log
{
Param (
[Parameter(Mandatory)]
[string]$LogString
)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp - $LogString"
Add-content $LogFile -value $LogMessage
Write-Host $LogString -ForegroundColor White
}
#end FUNCTIONS
Non ho fatto granchè in realtà, ho semplicemente esportato le righe relative al logging dal file precedente così che il file contenga solo la funzione Write-Log (che scrive effettivamente il log) ed i settaggi che servono ad indivuare dove scrivere il log. Al momento questi settaggi non sono modificabili, ma chissà, in futuro…
A questo punto però come posso utilizzare la Write-Log se sta in un file separato? La risposta è ovviamente semplicissima, come in tutti i linguaggi è possibile includere uno script in un altro script, nella fattispecie in PowerShell questo si fa con la “dot source notation” descritta qui [2] in cui basta sostanzialmente includere il il file con il path specifico. Nel nostro caso il file Conto2.3 cambierà nel modo seguente:
########### CONTO 2.3.1 ############
# First test
####################################
##### Inclueded Libraries ##########
# Get the current Directory
$myDir = Split-Path -Parent $MyInvocation.MyCommand.Path
# Files included
. "$myDir\XinLog.ps1" # Include the file logs
####################################
#begin BODY
Write-Log "Text to write"
#end BODY
Per chi fosse interessato potete trovare anche uno progetto Git dedicato [3].
[1] https://www.beren.it/2022/01/07/conto2-3-logging-with-powershell-get-started/