Question Re:[Méthodes d'extension]Génération auto de .ps1xml

Plus d'informations
il y a 13 ans 7 mois - il y a 3 ans 3 semaines #7556 par Laurent Dardenne
Voici un module PowerShell permettant de créer automatiquement un fichier .ps1xml dédié aux méthodes d'extension contenues dans un fichier assembly dotnet.

Sous Powershell V1 et V2 on ne peut pas utiliser celles dont le type de this est :
-un type générique, car le système d'extension de type de PowerShell nécessite de préciser des noms de type fort pour chaque paramètrage de la classe générique,
-un type interface, car PowerShell ne sait pas nativement 'extraire' une interface particulière à partir d'un objet. De plus le pipeline de PowerShell 'transforme' les objets de type IEnumerable en System.Array.

Quelques exemples autour du projet Dvp.NET .

Affiche le liste des méthodes d'extension contenues dans un assembly :
$PathAsm=\"G:\temp\dvp.net-0.2-beta\Binaries\"
Import-Module \"G:\PS\ExtensionMethod\ExtensionMethod.psm1\" -force
#Charge et retrouve les méthodes d'extension d'un assembly
# qui n'est pas dans le GAC
$Result=Add-Type -Path \"$PathAsm\Developpez.Dotnet.dll\" -Pass|
Find-ExtensionMethod -ExcludeGeneric
Pour 'System.Core' la recherche ne renvoi rien, car LINQ est conçu autour de classes génériques et d'interfaces :
#Charge et retrouve les méthodes d'extension d'un assembly du GAC
#On charge le namespace Linq du framework 3.5
$Result=Add-Type -assemblyname \"System.Core\" -Pass|
Find-ExtensionMethod -ExcludeGeneric |
#Recupère les informations des méthodes d'extension.
Get-ExtensionMethodInfo -ExcludeGeneric -ExcludeInterface
Récupère dans une hashtable les informations sur les méthodes :
$H=Add-Type -Path \"$PathAsm\Developpez.Dotnet.dll\" -Pass|
Find-ExtensionMethod -ExcludeGeneric|
Get-ExtensionMethodInfo -ExcludeGeneric -ExcludeInterface|
#Crée une hashtable regroupant les méthodes d'extension par type.
New-HashTable -key \"Key\" -Value \"Value\" -MakeArray
$H.\"System.IO.TextReader\"
Affiche sur la console, à l'aide d'un 'wrapper' sur le cmdlet Format-Table, la liste des méthodes d'extension regroupées par type :
Add-Type -Path \"$PathAsm\Developpez.Dotnet.dll\" -Pass|
Find-ExtensionMethod -ExcludeGeneric|
Get-ExtensionMethodInfo -ExcludeGeneric -ExcludeInterface|
New-HashTable -key \"Key\" -Value \"Value\" -MakeArray|
#Affiche le détail des méthodes d'extension trouvées
Format-TableExtensionMethod
L'objectif du module, générer un fichier d'extension de type (fichier .ps1xml) :
$TypesFileName=\"DateTimeExtensionMethod.Types.ps1xml\"
Add-Type -Path \"$PathAsm\Developpez.Dotnet.dll\" -Pass|
#filtre sur le namespace
# Where {$_.Namespace -eq \"Developpez.Dotnet.Reflection\"} |
Find-ExtensionMethod -ExcludeGeneric|
Get-ExtensionMethodInfo -ExcludeGeneric -ExcludeInterface|
New-HashTable -key \"Key\" -Value \"Value\" -MakeArray|
#Crée un texte représentant une structure XML que
# l'on insére dans un fichier de type PowerShell.
New-ExtensionMethodTypeData > $TypesFileName
Et enfin, dans la session courante, chargement et signature si nécessaire, du fichier d'extension de type généré :
Type $TypesFileName|More
#Si la stratégie d'exécution est 'AllSigned'
if (Get-ExcecutionPolicy -eq \"AllSigned\" )
{
#Signe $TypesFileName
}
#Met à jour la configuration de type étendu (ETS)
Update-TypeData $TypesFileName

#usage
$dt=Get-Date
$dt
# dimanche 1 août 2010 16:07:54

$dt.AddDays(1).Next(\"Sunday\"«»)
# renvoi :
# dimanche 8 août 2010 16:07:54
Téléchargement (MyGet)

Tutoriels PowerShell
Pièces jointes :
Dernière édition: il y a 3 ans 3 semaines par Laurent Dardenne.

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

Plus d'informations
il y a 7 ans 2 semaines - il y a 3 ans 3 semaines #23253 par Laurent Dardenne
Nouvelle version .
Elle utilise le module UncommonSense.PowerShell.TypeData qui permet de créer des fichiers de type (.ps1xml) aisément :
Types {
   _Type Foo {
       NoteProperty Baz Bar
       ScriptProperty Qux 'Get-Quux'
       MemberSet Quux {
       NoteProperty Quuux Boink
   }
 }
}


La génération est simplifiée, mnt un seul appel à partir d'un ou plusieurs types :
Add-Type -Path $AssemblyPath -Pass|
New-ExtendedTypeData -Path c:\temp\TestPs1Xml\All.ps1xml
Message édité par: Laurent Dardenne, à: 3/03/17 13:57

Tutoriels PowerShell
Dernière édition: il y a 3 ans 3 semaines par Laurent Dardenne. Raison: formatage

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

Plus d'informations
il y a 3 ans 3 semaines - il y a 3 ans 3 semaines #30493 par Laurent Dardenne
Un site proposant les nombreuses extensions du projet Z.ExtensionMethods : csharp-extension.com/
La dernière version du module gère les différents types de paramètre ('Params', 'optional' et 'byRef') et ajoute la signature de la méthode d'extension :
 
# mymethod([string] $S, [ref] [string] $Str2)
# mymethod([string] $S, [myColors] $color='Red')
# Func2([string] $S, [Flags] $f='F1, F2')
# MethodPtr([string] $S, [System.IntPtr] $arg=$null OR new OR default)

Tutoriels PowerShell
Dernière édition: il y a 3 ans 3 semaines par Laurent Dardenne. Raison: formatage

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

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