IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Comment retrouver le type d'une variable avec Where-Object


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Par défaut Comment retrouver le type d'une variable avec Where-Object
    Bonjour à tous,

    Comment retrouver le type d'une variable quand powershell vous la cast en System.Management.Automation.PSVariable

    Assez naturellement, je suis partit sur le code suivant pour tester ma question.
    Je crée 6 variables et je demande de ne me ressortir que celles qui sont de type DateTime:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [String]$var1 = "tuut"
    [String]$var2 = "tuut2"
    [Int32]$var3 = 10
    [Int32]$var4 = 100
    [DateTime]$var5 = Get-Date
    [DateTime]$var6 = $var5.Addhours(24)
    
    Get-Variable -name va* | Where-Object {$_ -is [DateTime]}
    Avec ce code, je n'obtiens rien en sortie.

    j'ai donc demandé à la commande suivante de me ressortir le type d'objet passé en paramètre à Where-Object. J'obtiens des objets de type PSVariable, et je n'ai donc plus de référence aux types d'origines (string, date, int).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [PS] S:\>Get-ChildItem variable: | where{$_.name -like 'var*'} | foreach {$_.getType()}
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     False    PSVariable                               System.Object
    True     False    PSVariable                               System.Object
    True     False    PSVariable                               System.Object
    True     False    PSVariable                               System.Object
    True     False    PSVariable                               System.Object
    True     False    PSVariable                               System.Object
    Comment fait on pour filtrer les variables en fonction de leur type?

    Merci,

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    une chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gc variable:\var* | % { $_.gettype()}

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Par défaut
    Merci pour ta réponse, cela ma fait un peu avancé dans mon analyse, mais cela ne solutionne pas encore le tout.

    Bon,

    voici quelques conclusions:

    Pour avoir quelque chose qui fonctionne pour me donner l'output désiré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    get-content variable:\var* | foreach { if ($_ -is [DateTime]){Write-Host $_}}
    Pour en revenir à mon exemple plus haut, dès que le where-object recoit la liste de variable, et ce, même après un foreach, cette liste est transformée en liste de type PSVARIABLE et donc inutilisable dans mon cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Get-Variable -Name var* | % { $_} | Where-Object {$_.Name -like "var*" }|% { $_.gettype()}
    Cela donne des objets de type PSVARIABLE.

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    tu peux aussi:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gc variable:\var* | where { $_.gettype().name -eq "datetime"}
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gc variable:\var* | Where { $_ -is [System.DateTime]}

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Par défaut
    Effectivement, c'est le Get-variable qui est problématique. Le Get-content marche niquel.

    J'étais persuadé d'avoir fait le test également.

    Merci :-)

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    sous PS il faut prendre l'habitude d'explorer les objets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Get-Variable var6|Get-Member
    On découvre la propriété Value :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-Variable -name va* | Where-Object {$_.value -is [DateTime]}
    #Name                           Value
    #----                           -----
    #var5                           19/07/2010 16:36:25
    #var6                           20/07/2010 16:36:25
    En même temps je n'avais jamais utiliser Get-Content sur le provider de variable, ce qui confirme que sous PS il y a souvent + maniéres de faire

    A noter que
    peut, selon le type, renvoyer les membres masqués par l'adapteur de PowerShell.

Discussions similaires

  1. [2.x] comment voir la valeur d'une variable avec symfony
    Par adel25 dans le forum Symfony
    Réponses: 15
    Dernier message: 17/07/2013, 19h50
  2. Réponses: 2
    Dernier message: 01/12/2008, 14h18
  3. comment connaitre le type d'une variable java
    Par bard123 dans le forum Général Java
    Réponses: 4
    Dernier message: 16/09/2008, 15h51
  4. Réponses: 2
    Dernier message: 13/02/2007, 17h40
  5. Comment recuperer la valeur d'une variable de session avec du javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo