Question [Tutoriel] Les classes sous Powershell v5

Plus d'informations
il y a 8 ans 5 mois #20945 par Laurent Dardenne
Salut,
voici un document sur la mise en œuvre des classes sous Powershell version 5 preview, ce n'est pas un cours sur la POO.

Le chapitre 3,'Introduction', aborde les principes de base de la syntaxe d'une classe.
Le chapitre 5 'Compléments' passe en revue les différentes possibilités et limite de la version actuelle.

Bonne lecture.

1 RAPPEL 4
2 A PROPOS DE TYPE 5
3 INTRODUCTION 6
3.1 CONSTRUCTEUR 6
3.2 PROPRIETE 8
3.2.1 Préciser un type 8
3.2.2 Valeur par défaut 9
3.2.1 Attributs de validation 9
3.2.2 Hidden 9
3.3 METHODE 11
3.3.1 $This 11
3.3.2 Paramètre 12
3.3.3 Valeur de retour 14
3.3.4 Hidden 16
3.3.5 Usage de variable Powershell 16
3.3.6 Surcharge de méthode 17
4 ENUM 21
5 COMPLEMENTS 23
5.1 CONSTRUCTEUR 23
5.1.1 Initialiseur 23
5.1.2 Statique 27
5.1.3 Exception 28
5.2 PROPRIETE 29
5.2.1 Attributs de validation 29
5.2.2 Statique 30
5.2.3 Valeur par défaut 31
5.2.4 Scope 33
5.2.5 Accesseurs 34
5.3 METHODE 35
5.3.1 Statique 35
5.3.2 Exception 36
6 AUTRES ASPECTS 37
6.1 PROPRIETE DE TYPE SCRIPTBLOCK 37
6.2 SCOPE 37
6.2.1 Script 40
6.2.2 Module 42
6.3 HERITAGE 47
6.3.1 Appel d’un constructeur d’une classe de base 48
6.3.2 Substitution de méthode 50
6.3.3 Classe générique 52
6.4 INTERFACE 54
6.5 INDEXEUR 56
6.5.1 Usage dans une boucle Foreach 57
6.5.2 Redéfinir la propriété Count 58
6.5.3 Accès multiple 60
6.5.4 Interface et indexeur 61
6.6 DELEGUE 62
6.7 VARIABLE LIEE 63
6.8 SURCHARGE D’OPERATEUR 64
6.8.1 Additionner des choux ou des carottes 67
6.8.2 Un peu de cast..agne 68
6.8.3 Liste des opérateurs 74
6.9 SERIALISATION 75
7 INTERACTION C# ET CLASSE POWERSHELL 78
7.1 ADD-TYPE 78
7.2 HERITAGE D’UNE CLASSE C# 81
7.3 HERITAGE DE CLASSE ENTRE MODULES 82
8 DSC 84
9 CONCLUSION 85


Un complément (C#) sur les classes sans constructeur :
codeblog.jonskeet.uk/2016/01/08/to-base-...hat-is-the-question/

[ref] doesn't work with class members

Résolution de conflit lorsqu'une classe possède une méthode statique nommée New

using assembly and class

Return dans une classe
[gotcha] Cannot Implement an Interface with Properties.

v6 bug de déclaration d'Enum corrigé

Bug avec new-module 5.1 et 6 alpha.

Breaking change PowerShell class instance methods cannot run concurrently 5.0 -> 5.1 ?

Bug 5.0->5.1

Class-definition syntax should support calling the same class's other constructors

Creating A DSC Class-Based Resource

Bug autour de 'FunctionToExport' ou 'CmdletToExport'

[url=https://github.com/PowerShell/PowerShell/issues/4193#issuecomment-315222129
]Apostrophe in filepath breaks Import-Module when the module has a class in it[/url]

bug: If a module 'test' has multiple nested .psm1 modules that define powershell classes, then `using module test` can only load the classes defined in `test.psm1` but not other .psm1 files

Inheritance from interface and class are inconsistent

Module d'aide à la création d'interface .

les membres ETS prime sur les membres de classe.

Usage de la clause Using

Singleton

Remove Class from Memory in PowerShell

Message édité par: Laurent Dardenne, à: 26/05/17 17:37

Message édité par: Laurent Dardenne, à: 4/07/17 07:34

Message édité par: Laurent Dardenne, à: 17/07/17 07:19

Message édité par: Laurent Dardenne, à: 22/07/17 08:09

Message édité par: Laurent Dardenne, à: 8/11/17 09:41

Message édité par: Laurent Dardenne, à: 10/11/17 11:13

Message édité par: Laurent Dardenne, à: 13/12/17 13:37

Message édité par: Laurent Dardenne, à: 18/03/18 19:43

Message édité par: Laurent Dardenne, à: 22/08/18 17:24

Message édité par: Laurent Dardenne, à: 7/05/19 19:32<br><br>Message édité par: Laurent Dardenne, à: 30/08/19 09:52

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 4 mois #21077 par Laurent Dardenne
Un bug (plutôt une limite) qui ne sera pas résolu.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #21486 par Laurent Dardenne
On peut créer des exceptions :
[code:1]
$Error.Clear()

$result=Start-job -ScriptBlock {
class myException:«»System.ApplicationException{
myException()
{
}

myException([string] $message):base($message)
{
}

myException([string] $message, [System.Exception] $innerException)
: base($message, $innerException)
{
}
}

throw (New-Object myException \&quot;My error inside job\&quot;«»)

}|Receive-Job -Wait -AutoRemoveJob

$e=$Error[0]
$e.Exception.GetType()
$e.Exception|select *
[/code:1]
Sous réserve de rester dans l'environnement PS, car l'attribut [Serializable()] n'est pas accessible,
Ceci ne pose pas de problème dans le remoting :

The remote instance of Windows PowerShell can be a separate application domain, process, or computer.
This remote entity can be PS.exe (the default host application) or a custom host application.

The type of the original exception might not be available in the local application domain, process, or computer,
so the original exception is available only as a serialized PSObject object.


Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 9 mois #22077 par Laurent Dardenne
Fonction permettant de déterminer si une instance de classe est une classe Powershell native :
[code:1]function Test-PowershellDynamicClass {
#Teste si le type est une classe PS dynamique
#requiert PS v5
# Test-PowershellDynamicClass Psobject
# Test-PowershellDynamicClass MyClass
# extrait et adapté de github.com/PowerShell/PowerShell-Tests


Param (
[ValidateNotNullOrEmpty()]
[Parameter(Position=0, Mandatory=$true,ValueFromPipeline = $true)]
[type] $Type
)

Process {
$attrs = @($Type.Assembly.GetCustomAttributes($true))
$result = @($attrs | Where { $_ -is [System.Management.Automation.DynamicClassImplementationAssemblyAttribute] })
return ($result.Count -eq 1)
}
}[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 23/08/16 12:25

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 1 mois #23258 par Laurent Dardenne
L'usage de using module autorise la qualification d'un nom de classe avec le nom du module qui l'héberge :
[code:1]
[NomDeClasse]

[NomDeModule.NomDeClasse]
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 ans 5 jours #25314 par Laurent Dardenne
Un post référençant les points à améliorer et à corriger.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.085 secondes
Propulsé par Kunena