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 : 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()
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
    }

}
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?