Question [Tutoriel] Les classes sous Powershell v5
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
[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 \"My error inside job\"«»)
}|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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
[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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
[code:1]
[NomDeClasse]
[NomDeModule.NomDeClasse]
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
- Messages : 6290
- Remerciements reçus 67
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Tutoriel] Les classes sous Powershell v5