Surchage ou enchaînement de méthode ?
Bonjour à tous,
je m'atèle à la création d'objet en PowerShell afin de pouvoir les réutiliser plus facilement que des fonctions dans divers scripts.
J'ai commencé par un objet simple, un objet de log qui n'a que des méthodes (démarrer le log, l'arrêter, ajouter une entrée info, warn, ok) et ça fonctionne.
Code:
1 2 3 4
| $log = New-Log "fichier.log"
$log.Start()
$log.Warn("Attention")
$log.Stop() |
me remplit bien mon fichier de log. Jusque là ça va.
Mon problème est que j'aimerais chaîner ou surcharger, je ne sais pas quel est le meilleur terme, une fonction afin de rendre mon code plus écologique et plus évolutif (et par intérêt pédagogique). C'est à dire de faire par exemple :
Code:
1 2
| $log.Add().Warn("Attention")
$log.Add().Info("Hello World !") |
C'est là que je suis perdu. Voici mon code (la focntion Add n'est pas implémentée):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| function New-Log{
[CmdletBinding()]
<#
.Synopsis
.DESCRIPTION
.EXAMPLE
#>
param([Parameter(Mandatory=$true)][string]$File)
begin{
# Tester l'existance du fichier de log ou le créer
if(Test-Path $File){
$log = $File
}else{
$log = New-Item -type file "$File" -Force
}
}
process{
$Objet = New-Object PsObject
$Objet | Add-Member -MemberType NoteProperty -Name LogFile -Value $log
# Débuter le log
$Objet | Add-Member -MemberType ScriptMethod -Name Start -Value{
$logInfo = "`n"+"*"*60 + "`n[INFO] - $([Environment]::UserName) ouverture de session $(Get-Date -Format "dd/MM/yyyy %H:mm:ss")`n"+"*"*60
Add-Content $this.LogFile $logInfo
}
# Arrêter le log
$Objet | Add-Member -MemberType ScriptMethod -Name Stop -Value{
$logInfo = "`n"+"*"*60 + "`n[INFO] - Fermeture de session`n"+"*"*60
Add-Content $this.LogFile $logInfo
}
# Ajouter un commentaire préfixé [OK]
$Objet | Add-Member -MemberType ScriptMethod -Name Ok -Value{
.{param ([Parameter(Mandatory=$true)][string]$logInfo)} @args
$logInfo = "[OK] - "+ $logInfo
Add-Content $this.LogFile $logInfo
}
# Ajouter un commentaire préfixé [WARNING]
$Objet | Add-Member -MemberType ScriptMethod -Name Warning -Value{
.{param ([Parameter(Mandatory=$true)][string]$logInfo)} @args
$logInfo = "[WARNING] - "+ $logInfo
Add-Content $this.LogFile $logInfo
}
# Ajouter un commentaire préfixé [INFO]
$Objet | Add-Member -MemberType ScriptMethod -Name Info -Value{
.{param ([Parameter(Mandatory=$true)][string]$logInfo)} @args
$logInfo = "[INFO] - "+ $logInfo
Add-Content $this.LogFile $logInfo
}
# Ajouter un commentaire préfixé [ERROR]
$Objet | Add-Member -MemberType ScriptMethod -Name Error -Value{
.{param ([Parameter(Mandatory=$true)][string]$logInfo)} @args
$logInfo = "[ERROR] - "+ $logInfo
Add-Content $this.LogFile $logInfo
}
}
end{
return $Objet
}
} |
Déjà y a-t-il un intérêt? réellement je ne crois pas mais cela pourrais m'être utile pour d'autres objets j'en suis certain. Ensuite comment faire (je sais qu'on peut utiliser un $this.truc ..... mais je ne vois pas comment l'implémenter dans mon cas)
Merci de vos retours.
David
PS : Y'a t-il un attribut à mettre pour faire la coloration powershell dans la balise CODE? comme pour SQL?