Question
Pourquoi la propriété d'un objet ne s'affiche pas
- filip_le_triste
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 12 ans 11 mois #14438
par filip_le_triste
Pourquoi la propriété d'un objet ne s'affiche pas a été créé par filip_le_triste
Bonjour à tous,
Je commence à utiliser Powershell et j'ai un petit souci pour obtenir la valeur d'une propriété.
Je croyais pourtant avoir bien saisi les objets.
Pour l'exemple, je suis parti de la cmdlet Get-MailBox :
[code:1]
[PS] > $userbox = Get-MailBox - identity stef
[PS] > $userbox.Name
[/code:1]
et j'obtiens bien la propriété Name (de type system.string) de l'objet $userbox de TypeName : Microsoft.Exchange.Data.Directory.Management.Mailbox
Jusque là tout va bien.
je fais la même chose avec la propriété Languages sur l'objet $userbox et j'affiche les méthodes et propriétés avec Get-Member
[code:1]
[PS] > $userLangue = $userbox.Languages
[PS] > $userLangue | Get-Member
[/code:1]
J'obtiens ceci :
[code:1]
[PS] > $userLangue | Get-Member
TypeName: System.Globalization.CultureInfo
Name MemberType Definition
----
ClearCachedData Method System.Void ClearCachedData()
Clone Method System.Object Clone()
Equals Method bool Equals(System.Object value)
GetConsoleFallbackUICulture Method System.Globalization.CultureInfo GetConsoleFallbackUICulture()
GetFormat Method System.Object GetFormat(type formatType)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Calendar Property System.Globalization.Calendar Calendar {get;}
CompareInfo Property System.Globalization.CompareInfo CompareInfo {get;}
CultureTypes Property System.Globalization.CultureTypes CultureTypes {get;}
DateTimeFormat Property System.Globalization.DateTimeFormatInfo DateTimeFormat {get;set;}
DisplayName Property System.String DisplayName {get;}
EnglishName Property System.String EnglishName {get;}
IetfLanguageTag Property System.String IetfLanguageTag {get;}
IsNeutralCulture Property System.Boolean IsNeutralCulture {get;}
IsReadOnly Property System.Boolean IsReadOnly {get;}
KeyboardLayoutId Property System.Int32 KeyboardLayoutId {get;}
LCID Property System.Int32 LCID {get;}
Name Property System.String Name {get;}
NativeName Property System.String NativeName {get;}
NumberFormat Property System.Globalization.NumberFormatInfo NumberFormat {get;set;}
OptionalCalendars Property System.Globalization.Calendar[] OptionalCalendars {get;}
Parent Property System.Globalization.CultureInfo Parent {get;}
TextInfo Property System.Globalization.TextInfo TextInfo {get;}
ThreeLetterISOLanguageName Property System.String ThreeLetterISOLanguageName {get;}
ThreeLetterWindowsLanguageName Property System.String ThreeLetterWindowsLanguageName {get;}
TwoLetterISOLanguageName Property System.String TwoLetterISOLanguageName {get;}
UseUserOverride Property System.Boolean UseUserOverride {get;}
[/code:1]
Donc je me dis que je vais récupérer quelques propriétés ( par ex. LCID, Name ) en faisant la même chose que précédemment
[code:1]
[PS] >$userLangue.Name
[PS] >$userLangue.LCID
[/code:1]
Dans ce cas-là, je ne récupère rien et en faisant un Get-Member, j'ai un message d'erreur.
Soit je n'ai rien compris sur les objets, soit il y a une subtilité que je ne connais pas.
Si quelqu'un peut m'expliquer, je l'en remercie d'avance.
Cordialement
Je commence à utiliser Powershell et j'ai un petit souci pour obtenir la valeur d'une propriété.
Je croyais pourtant avoir bien saisi les objets.
Pour l'exemple, je suis parti de la cmdlet Get-MailBox :
[code:1]
[PS] > $userbox = Get-MailBox - identity stef
[PS] > $userbox.Name
[/code:1]
et j'obtiens bien la propriété Name (de type system.string) de l'objet $userbox de TypeName : Microsoft.Exchange.Data.Directory.Management.Mailbox
Jusque là tout va bien.
je fais la même chose avec la propriété Languages sur l'objet $userbox et j'affiche les méthodes et propriétés avec Get-Member
[code:1]
[PS] > $userLangue = $userbox.Languages
[PS] > $userLangue | Get-Member
[/code:1]
J'obtiens ceci :
[code:1]
[PS] > $userLangue | Get-Member
TypeName: System.Globalization.CultureInfo
Name MemberType Definition
----
ClearCachedData Method System.Void ClearCachedData()
Clone Method System.Object Clone()
Equals Method bool Equals(System.Object value)
GetConsoleFallbackUICulture Method System.Globalization.CultureInfo GetConsoleFallbackUICulture()
GetFormat Method System.Object GetFormat(type formatType)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Calendar Property System.Globalization.Calendar Calendar {get;}
CompareInfo Property System.Globalization.CompareInfo CompareInfo {get;}
CultureTypes Property System.Globalization.CultureTypes CultureTypes {get;}
DateTimeFormat Property System.Globalization.DateTimeFormatInfo DateTimeFormat {get;set;}
DisplayName Property System.String DisplayName {get;}
EnglishName Property System.String EnglishName {get;}
IetfLanguageTag Property System.String IetfLanguageTag {get;}
IsNeutralCulture Property System.Boolean IsNeutralCulture {get;}
IsReadOnly Property System.Boolean IsReadOnly {get;}
KeyboardLayoutId Property System.Int32 KeyboardLayoutId {get;}
LCID Property System.Int32 LCID {get;}
Name Property System.String Name {get;}
NativeName Property System.String NativeName {get;}
NumberFormat Property System.Globalization.NumberFormatInfo NumberFormat {get;set;}
OptionalCalendars Property System.Globalization.Calendar[] OptionalCalendars {get;}
Parent Property System.Globalization.CultureInfo Parent {get;}
TextInfo Property System.Globalization.TextInfo TextInfo {get;}
ThreeLetterISOLanguageName Property System.String ThreeLetterISOLanguageName {get;}
ThreeLetterWindowsLanguageName Property System.String ThreeLetterWindowsLanguageName {get;}
TwoLetterISOLanguageName Property System.String TwoLetterISOLanguageName {get;}
UseUserOverride Property System.Boolean UseUserOverride {get;}
[/code:1]
Donc je me dis que je vais récupérer quelques propriétés ( par ex. LCID, Name ) en faisant la même chose que précédemment
[code:1]
[PS] >$userLangue.Name
[PS] >$userLangue.LCID
[/code:1]
Dans ce cas-là, je ne récupère rien et en faisant un Get-Member, j'ai un message d'erreur.
Soit je n'ai rien compris sur les objets, soit il y a une subtilité que je ne connais pas.
Si quelqu'un peut m'expliquer, je l'en remercie d'avance.
Cordialement
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 12 ans 11 mois #14445
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Pourquoi la propriété d'un objet ne s'affiche pas
Que renvoie le code suivant ?
[code:1]$userbox.Languages.GetType()[/code:1]
Pour
[code:1]
$userLangue | Get-Member
[/code:1]
Si la variable est une collection elle renvoie le/les éléments contenus et pas le conteneur.
[code:1]$userbox.Languages.GetType()[/code:1]
Pour
[code:1]
$userLangue | Get-Member
[/code:1]
Si la variable est une collection elle renvoie le/les éléments contenus et pas le conteneur.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- filip_le_triste
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 12 ans 11 mois #14448
par filip_le_triste
Réponse de filip_le_triste sur le sujet Re:Pourquoi la propriété d'un objet ne s'affiche pas
Bonjour Laurent,
la commande me retourne ceci :
[code:1]
[PS] C:\Windows\system32>$userbox.Languages.GetType()
IsPublic IsSerial Name BaseType
----
True True MultiValuedProperty`1 Microsoft.Exchange.Data.MultiValuedPropertyBase
[/code:1]
C'est peut-être cette subtilité là que je n'ai pas abordé.
Abordes-tu ce sujet dans un de tes cours et si oui lequel ?
Merci de ton aide.
la commande me retourne ceci :
[code:1]
[PS] C:\Windows\system32>$userbox.Languages.GetType()
IsPublic IsSerial Name BaseType
----
True True MultiValuedProperty`1 Microsoft.Exchange.Data.MultiValuedPropertyBase
[/code:1]
C'est peut-être cette subtilité là que je n'ai pas abordé.
Abordes-tu ce sujet dans un de tes cours et si oui lequel ?
Merci de ton aide.
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 12 ans 11 mois #14450
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Pourquoi la propriété d'un objet ne s'affiche pas
filip_le_triste écrit:
[code:1]
,$userLangue | Get-Member
$userLangue.PSbase | Get-Member
[/code:1]
Ta variable me semble être un tableau, utilise un index :
[code:1]
$userLangue[0].Name
$userLangue[0].LCID
[/code:1]
filip_le_triste écrit:
Mais ici la classe est une classe générique, qui n'est pas abordé dans le tutoriel, mais le + souvent on les manipule comme une classe qui n'est pas générique.
Il faut utiliser la virgule pour indiquer au parseur de PS qu'on souhaite émettre dans le pipeline le conteneur et pas le contenu :C'est peut-être cette subtilité là que je n'ai pas abordé.
[code:1]
,$userLangue | Get-Member
$userLangue.PSbase | Get-Member
[/code:1]
Ta variable me semble être un tableau, utilise un index :
[code:1]
$userLangue[0].Name
$userLangue[0].LCID
[/code:1]
filip_le_triste écrit:
Peut être celui sur les structures de données.Abordes-tu ce sujet dans un de tes cours et si oui lequel ?
Mais ici la classe est une classe générique, qui n'est pas abordé dans le tutoriel, mais le + souvent on les manipule comme une classe qui n'est pas générique.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- filip_le_triste
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 12 ans 11 mois #14453
par filip_le_triste
Réponse de filip_le_triste sur le sujet Re:Pourquoi la propriété d'un objet ne s'affiche pas
Merci Laurent pour les explications.
Ca fonctionne avec l'indice
Je comprends mieux pourquoi je n'arrivais pas à obtenir le contenu de ma propriété.
C'est logique puisque une mailbox peut être paramétrer avec plusieurs langages, donc on récupère une collection d'objet.
Je pensais qu'avec la cmdlet Get-Member, je pourrais obtenir toutes les informations dont j'ai besoin pour exploiter les objets.
Alors une question me vient à l'esprit, comment fait-on pour savoir si on récupère un objet, ou une collection d'objet, ou autre chose ? car à partir de Get-Member, ce n'est pas indiqué.
Merci à toi.
Ca fonctionne avec l'indice
Je comprends mieux pourquoi je n'arrivais pas à obtenir le contenu de ma propriété.
C'est logique puisque une mailbox peut être paramétrer avec plusieurs langages, donc on récupère une collection d'objet.
Je pensais qu'avec la cmdlet Get-Member, je pourrais obtenir toutes les informations dont j'ai besoin pour exploiter les objets.
Alors une question me vient à l'esprit, comment fait-on pour savoir si on récupère un objet, ou une collection d'objet, ou autre chose ? car à partir de Get-Member, ce n'est pas indiqué.
Merci à toi.
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 12 ans 11 mois #14454
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Pourquoi la propriété d'un objet ne s'affiche pas
filip_le_triste écrit:
Un exemple :
[code:1]
#fonction interne extraite d'un module
function isCollection {
param($Object)
$Object -is [System.Collections.IEnumerable] -and $Object -isnot [String]
}#isCollection
[/code:1]
Ici on souhaite savoir si une variable est une collection, sauf les string qui sont implémentées autour d'un tableau de chars.
C'est surtout le type de la collection qui peut être différent . (todo automatiser le copier coller !)
Le plus souvent, comme le polymorphisme n'est pas supporté par PS, on se contente de déterminer si l'objet est une collection ou pas. Le 'autre chose' est lié à l'opérateur -is.
filip_le_triste écrit:
Pour l'objet et les collections voir ceci , pour le 'autre chose' je ne saurais répondre, sauf qu'il faut savoir ce qu'on l'on cherche pour espérer le trouver...comment fait-on pour savoir si on récupère un objet, ou une collection d'objet, ou autre chose ?
Un exemple :
[code:1]
#fonction interne extraite d'un module
function isCollection {
param($Object)
$Object -is [System.Collections.IEnumerable] -and $Object -isnot [String]
}#isCollection
[/code:1]
Ici on souhaite savoir si une variable est une collection, sauf les string qui sont implémentées autour d'un tableau de chars.
C'est surtout le type de la collection qui peut être différent . (todo automatiser le copier coller !)
Le plus souvent, comme le polymorphisme n'est pas supporté par PS, on se contente de déterminer si l'objet est une collection ou pas. Le 'autre chose' est lié à l'opérateur -is.
filip_le_triste écrit:
Non, car les interfaces ne sont pas affichées, seul les membres 'implémentés via une interface' le sont. Voir le système de réflexion de dotnet.car à partir de Get-Member, ce n'est pas indiqué.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.052 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Pourquoi la propriété d'un objet ne s'affiche pas