Question [/Build] PS V5 Preview

Plus d'informations
il y a 5 ans 10 mois #18475 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[/Build] PS V5 Preview
Un truc en passant, l'ajout de la valeur AtBreakpoint dans la liste des états d'un job. Reste a savoir comment le gérer...

Tutoriels PowerShell

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

Plus d'informations
il y a 5 ans 9 mois #18531 par Laurent Dardenne

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

Plus d'informations
il y a 5 ans 8 mois #18774 par Flav
Réponse de Flav sur le sujet Re:[/Build] PS V5 Preview
Bonjour,

En attendant la prochaine preview qui se fait attendre, j'ai écrit un peu de code autour des classes Powershell.

Cela permet de voir ce qui est en construction sur les fonctions expérimentales.

github.com/flavops/Lexec.Type

PS : le code est expérimental et uniquement pour l'étude de Powershell, en aucun cas pour de la production.

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

Plus d'informations
il y a 5 ans 8 mois #18775 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[/Build] PS V5 Preview
Salut,
Flav écrit:

Cela permet de voir ce qui est en construction sur les fonctions expérimentales.

Justement j'ai un peu de mal à 'voir' l'objectif et les usages. Si tu as qq minutes pour nous les exprimer ce serait bien.

Au trouver le module Poke prérequis ?

Je n'ai pas pris le temps de consulter le code, de toute façon je n'ai pas de machine de test avec la v5 :lol:

Tutoriels PowerShell

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

Plus d'informations
il y a 5 ans 8 mois #18776 par Flav
Réponse de Flav sur le sujet Re:[/Build] PS V5 Preview
Le code effectue les choses suivantes :
- On récupère l'AST d'un scriptblock
- On se ballade dans l'AST et on génère une assembly dynamique contenant 2 classes DotNet, une contenant un wrapper vers l'autre qui contient du code dynamique.(cette technique est celle utilisé par le code de la dernière version 5.0)
- On pose optionnelement une dll partielle (qui ne contient pas le code Dynamique) sur le disque pour ceux qui veulent regarder
- On met un TypeAccelerator car les types ne sont pas en DeclaredTypes mais DefinedTypes.

Le code contient le moyen de décorer ses classes avec des attributes, qui ne cassent pas l'AST et sont récupérer par le code pour génerer une sorte de type selon le besoin

Ses fonctionnalités devraient être fournis par Powershell.

Sur le fond, c'est pour préparer le changement de paradigme function/cmdlet/module VS function/cmdlet/module/class/enum/interface/using/

Même si la team Powershell n'implémente pas tous les cas de figure, c'est la possibilité d'implémenter ces cas en attendant. Comme par exemple DynamicObject ;)

Ce code n'est pas supportable dans le cadre d'un projet.

J'ai posé ce code pour toi Laurent. Pour tout l'énorme travail que tu as réalisé ici :)


[code:1]
# Add an CLR Interface
Add-Type -Language Csharp -TypeDefinition @'
public interface IFoo
{
void Foo();
}
'@

# Add an CLR Type MyNameSpace.Utils.ClassThatImplementsInterface with BaseType [Object] and Implements [IFoo]
Add-ClassType {
[MetaClassAttribute(NamespaceName='MyNameSpace.Utils',BaseType=[object],Interfaces=[IFoo])]
class ClassThatImplementsInterface {

[string] $Name

ClassThatImplementsInterface($Name) {
$this.Name = $Name
}

[string] GetName() {
return $this.Name
}
[void] Foo() {
Write-Host \"Foo()\"
}

}
}
$Toto = [MyNameSpace.Utils.ClassThatImplementsInterface]::new('toto')
$Toto -is [iFoo] # True
$Toto.Foo()
$Toto -is [object]
$Toto.GetName() # toto

[/code:1]

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

Plus d'informations
il y a 5 ans 8 mois #18777 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[/Build] PS V5 Preview
Flav écrit:

J'ai posé ce code pour toi Laurent.

Merci, il me reste à monter une machine de test pour étudier ton code.

Tutoriels PowerShell

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

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