Question le mystère des attributs PS*

Plus d'informations
il y a 15 ans 3 mois #8294 par jojo
le mystère des attributs PS* a été créé par jojo
Bonsoir les PowerShelleurs :laugh:

j'ai deux questions concernant les attributs PS*
[code:1](dir)[0] | gm -MemberType note*[/code:1]

1- Quel est l'utilité des attributs PS*


2- pour la deuxième question: pourquoi si on écris la classe .NET en dur ça ne retourne aucun attribut PS*

[code:1]# la classe est 'System.IO.DirectoryInfo'
PS D:\> (dir)[0] | gm -MemberType note*

TypeName: System.IO.DirectoryInfo

Name MemberType Definition
----

PSChildName NoteProperty System.String PSChildName=Nouveau dossier
PSDrive NoteProperty System.Management.Automation.PSDriveInfo PSDrive=D
PSIsContainer NoteProperty System.Boolean PSIsContainer=True
PSParentPath NoteProperty System.String PSParentPath=Microsoft.PowerShell.C...
PSPath NoteProperty System.String PSPath=Microsoft.PowerShell.Core\Fi...
PSProvider NoteProperty System.Management.Automation.ProviderInfo PSProvi...

# on va utiliser la même classe 'System.IO.DirectoryInfo'
PS D:\> [System.IO.DirectoryInfo] | gm -MemberType note*

# ça ne retourne aucune propriété pourquoi ?![/code:1]


Merci :laugh:<br><br>Message édité par: jojo, à: 13/12/10 17:51

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

Plus d'informations
il y a 15 ans 3 mois #8295 par Jacques Barathon

1- Quel est l'utilité des attributs PS*


Ce sont des propriétés (ou des méthodes) ajoutées à l'objet initial par l'équipe PowerShell. En général ce sont des fonctionnalités qui simplifient la vie de l'administrateur système, qui n'est pas la cible de départ (loin s'en faut) des créateurs du Framework .NET.

2- pour la deuxième question: pourquoi si on écris la classe .NET en dur ça ne retourne aucun attribut PS*


Comme ce sont des membres rajoutés par PowerShell, ils n'apparaissent que quand on accède à l'objet via des commandes PowerShell. Quand on passe directement le type .NET à la commande get-member, celle-ci montre le type \&quot;brut de décoffrage\&quot;.

Pour info, il n'y a pas que des NoteProperties qui soient rajoutées par PS. Tu as aussi des AliasProperties, des ScriptProperties, etc. Pour voir quels sont les membres \&quot;bruts de décoffrage\&quot;(dits \&quot;de base\&quot;), et à l'inverse les membres ajoutés par PowerShell (dits \&quot;étendus\&quot;) sur n'importe quel objet :

[code:1]
PS&gt; $proc = new-object system.diagnostics.process
PS&gt; $proc.psbase | get-member

[...] # liste des membres de base du type .NET

PS&gt; $proc.psextended | get-member

[...] # liste des membres ajoutés par PS
[/code:1]

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

Plus d'informations
il y a 15 ans 3 mois #8296 par Laurent Dardenne
Sur le sujet tu peux consulter ce tutoriel .
Sinon on peut remarquer que les membres, cités par Janel dans le dernier exemple, ne sont pas listés par Get-Member, mais bien reconnus par le parser de PowerShell.
Get-Member propose le paramétre -View qui renvoit le même résultat.

Sinon j'ajouterais que chacun peut ajouter des membres sur toutes les classes.

Pour la V2 il existe un nouveau type de membre peu documenté, PSVariableProperty :
[code:1]
[Int]$MaVariable= 10
$ObjetVariable=Get-Variable MaVariable

$PSVP = New-Object System.Management.Automation.PSVariableProperty $ObjetVariable

$UnObjet = New-Object PSCustomObject
$UnObjet.PSObject.Members.Add($PSVP)
$UnObjet
[/code:1]
le nom de la variable est utilisé comme nom de membre.
Ce type n'est pas accessible via Add-Member.
Cette propriété est tjr vue comme une NoteProperty, mais elle est contrainte sur le type :
[code:1]
$UnObjet.MaVariable=\&quot;Test\&quot;
[/code:1]
Le code précédent génére une exception, là où pour une NoteProperties \&quot;ça passe\&quot;.

Ce type offre d'autres possibilités, je les présenterais prochainement dans un autre post.

ps:
Pour la notion d'attribut voir ce tutoriel .<br><br>Message édité par: Laurent Dardenne, à: 13/12/10 20:27

Tutoriels PowerShell

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

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