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 :

Affichage d'un tableau [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Affichage d'un tableau
    Bonjour,
    J'essaye d'afficher un tableau en colonne... et plus précisément le résultat de cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -filter "IpEnabled = TRUE"
    en ayant les colonnes suivantes :
    Num, ServiceName, Description, MacAddress, IPv4

    J'ai commencé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $command = {GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -filter "IpEnabled = TRUE"}
    $res = Invoke-Command -scriptblock $command
    $aNetworkAdapter=@()
    ForEach ($item in $res) {
    	$NetworkAdapter=@{ServiceName=$item.ServiceName;Description=$item.Description;MacAddress=$item.MacAddress;IPv4=$item.IpAddress[0]}
    	$aNetworkAdapter+=$NetworkAdapter
    }
    $aNetworkAdapter | Format-Table -AutoSize
    Mais évidemment ça ne fonctionne pas.

    Si vous pouvez m'aider d'une manière ou d'une autre... merci d'avance !

  2. #2
    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,
    quelle version de PS utilises-tu ?
    As-tu besoin du remoting ?

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    v4

    à terme oui, j'aurai besoin du remoting...

  4. #4
    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
    Avant d'aller plus loin, au lieu d'utiliser un tableau de hashtables il est préférable d'utiliser un tableau d'objets qui est plus facile à manipuler avec les cmdlets *-Object.
    Comme ce besoin est récurrent avec PS autant générer une fonction simple de création d'objet personnalisé :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $Noun='NetworkAdapter'
     #crée une fonction directement dans le provider de fonction
     #Cette fonction peut créer un script 
    New-PSCustomObjectFunction -Noun $Noun -Parameters ComputerName,ServiceName,Description,MacAddress,IPAddress | 
     Set-Item Function:"New-$Noun" -Force
    Une fois la fonction créée et enregistrée dans le provider de fonction :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     #On ne récupère que le strict minimum
    $command = {GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -filter "IpEnabled = TRUE" -Property ServiceName, Description, MacAddress, IPAddress}
     
      #$Result = Invoke-Command -Computer LocalHost,inconnu,$Env:ComputerName -scriptblock $command
    $Result = Invoke-Command -Computer LocalHost,$Env:ComputerName -scriptblock $command
     #Optimisation
    $NetworkAdapters=New-Object System.Collections.Arraylist
     #La création des objets se fait en local 
    ForEach ($Adapter in $Result) {
       $NetworkAdapters +=(New-NetworkAdapter -ComputerName $Adapter.PSComputerName `
                            -ServiceName $Adapter.ServiceName `
                            -Description $Adapter.Description `
                            -MacAddress $Adapter.MacAddress `
                            -IpAddress $Adapter.IpAddress|
                            Add-member -Passthru -MemberType ScriptMethod -Name GetIpV4 -Value {
                              #Filtre les adresses IP v4                                    
                              $this.IpAddress|
                                Foreach-Object {
                                  $Current=$_
                                    #Transforme une chaîne en une adresse IP
                                  [IpAddress]$_
                                }|
                                Where-Object {
                                   #cf. https://msdn.microsoft.com/fr-fr/library/system.net.sockets.addressfamily%28v=vs.100%29.aspx                                          
                                  $_.AddressFamily -eq 'Internetwork'
                                }|
                                Foreach-Object {
                                  $Current
                                }
                            }#add-member
                          )
    }
     #manipulation plus aisée
    $NetworkAdapters|Group-Object Computername
     
    $NetworkAdapters|Format-Table -AutoSize
     #Enumére les Adresse IPv4 de l'adapter zéro 
    $NetworkAdapters[0].GetIpV4()
    Reste à coder une gestion d'exception.

    La fonction de génération de fonction :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #Requires -version 3.0
     
    Function New-PSCustomObjectFunction {
        #crée une fonction génèrant un objet personnalisé simple
        #tous ses paramètres sont obligatoires et ne sont pas typé
        #
        # Par défaut génère du code sans la signature du mot clé Function
        # Le paramètre -FILE génére du code avec la signature du mot clé Function
        # Le paramètre -AsPSVariableProperty génére un objet dont 
        #  les propriétés sont basées sur la classe PSVariableProperty. Requière le module PSObjectHelper
     
      param(
           [Parameter(Mandatory=$true,position=0)]
           [ValidateNotNullOrEmpty()]
          $Noun,
           [Parameter(Mandatory=$true,position=1)]
           [ValidateNotNullOrEmpty()]
          [String[]]$Parameters,
          [switch] $File,
          [switch] $AsPSVariableProperty #todo switch ReadOnly 
      )
    $ofs=' '
    $Borne=$Parameters.count-1
    $code=@"
    #Requires -version 3
     
    $(if ($AsPSVariableProperty) {"#Requires -Modules PSObjectHelper"})
    $(if ($File) {"Function New-$Noun{"})
    param(
        $(For ($I=0;$I -le $Borne;$I++)
          { $Name=$Parameters[$I]
            @"
    `t [Parameter(Mandatory=`$True,position=$I)]
    `t`$${Name}$(if ($I -Ne $borne) {",`r`n"})
    "@
          } 
         )     
    )
     $( if ($AsPSVariableProperty) 
        {
    @'  
      $O=[pscustomobject]@{
           PSTypeName='montruc'
         }
      $PSBoundParameters.GetEnumerator()|
       Foreach {
         $O.PSObject.Properties.Add( (New-PSVariableProperty $_.Key $_.Value -ReadOnly) ) 
       }
     $O
    '@
       }
       else
       { 
         "`r`n  [pscustomobject]@{`r`n"
         "   PSTypeName='$Noun';"
      $( $Parameters|
         Foreach {
          "`r`n    {0}=`${1};" -F $_,$_
         }
       ) 
      "`r`n   }"
       }#else 
      ) 
     
    $(if ($File) {"`r`n}# New-$Noun"})
    "@
    $Code
    }#New-PSCustomObjectFunction

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Merci Laurent Dardenne...
    je comprends rien à la méthode... je verrai cela lorsque ça fonctionnera.
    pour le moment je pense que ta fonction New-PSCustomObjectFunction n'est pas complète ou corrompue.

  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
    Citation Envoyé par Tchupacabra Voir le message
    je comprends rien à la méthode...
    C'est à dire ?
    Dans un premier temps on peut utiliser la fonction New-PSCustomObjectFunction sans comprendre son code.
    La fonction générée est juste un 'passe-plat' pour créer un objet via cette syntaxe :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [pscustomobject]@{
      PSTypeName='NetworkAdapter';
      ComputerName=$ComputerName;
      ServiceName=$ServiceName;
      Description=$Description;
      MacAddress=$MacAddress;
      IPAddress=$IPAddress;
     }
    Tu peux utiliser directement cette syntaxe en l'adaptant si tu préfères.

    Citation Envoyé par Tchupacabra Voir le message
    pour le moment je pense que ta fonction New-PSCustomObjectFunction n'est pas complète ou corrompue.
    Je viens de tester à nouveau en recopiant du forum, je n'ai pas de pb. Lequel rencontres-tu ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP]affichage d'un tableau sur plusieurs pages
    Par MAJIK_ENIS dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 29/08/2005, 11h21
  2. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  3. Prob d'affichage d'un tableau resultant d'u...
    Par Yohips dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/12/2004, 17h23
  4. [MFC] Affichage d'un tableau
    Par SethPech dans le forum MFC
    Réponses: 7
    Dernier message: 23/02/2004, 15h48
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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