Question
le mystère des attributs PS*
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8294
par jojo
le mystère des attributs PS* a été créé par jojo
Bonsoir les PowerShelleurs 
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
<br><br>Message édité par: jojo, à: 13/12/10 17:51
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
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8295
par Jacques Barathon
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.
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 \"brut de décoffrage\".
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 \"bruts de décoffrage\"(dits \"de base\"), et à l'inverse les membres ajoutés par PowerShell (dits \"étendus\") sur n'importe quel objet :
[code:1]
PS> $proc = new-object system.diagnostics.process
PS> $proc.psbase | get-member
[...] # liste des membres de base du type .NET
PS> $proc.psextended | get-member
[...] # liste des membres ajoutés par PS
[/code:1]
Réponse de Jacques Barathon sur le sujet Re:le mystère des attributs PS*
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 \"brut de décoffrage\".
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 \"bruts de décoffrage\"(dits \"de base\"), et à l'inverse les membres ajoutés par PowerShell (dits \"étendus\") sur n'importe quel objet :
[code:1]
PS> $proc = new-object system.diagnostics.process
PS> $proc.psbase | get-member
[...] # liste des membres de base du type .NET
PS> $proc.psextended | get-member
[...] # liste des membres ajoutés par PS
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 3 mois #8296
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:le mystère des attributs PS*
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=\"Test\"
[/code:1]
Le code précédent génére une exception, là où pour une NoteProperties \"ça passe\".
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
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=\"Test\"
[/code:1]
Le code précédent génére une exception, là où pour une NoteProperties \"ça passe\".
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- le mystère des attributs PS*