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.
me remplit bien mon fichier de log. Jusque là ça va.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $log = New-Log "fichier.log" $log.Start() $log.Warn("Attention") $log.Stop()
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 :
C'est là que je suis perdu. Voici mon code (la focntion Add n'est pas implémentée):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $log.Add().Warn("Attention") $log.Add().Info("Hello World !")
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } }
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?
Partager