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 :

Problème pour la création d'un tableau de données [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Par défaut Problème pour la création d'un tableau de données
    Bonjour,

    Je suis admin dans une SSII et je bricole avec PowerShell depuis un an, sans avoir de fibre de développeur.
    Malgré avoir lu de nombreux tutos, notamment sur les variables (objet, hashtable...) je n'arrive pas au résultat escompté pour mon script.

    Ceci va peut être vous paraitre tout bête, mais je n'arrive pas à créer un tableau avec des noms de colonnes.
    En d'autres termes j'aimerai que mon script ressemble à un cmdlet et qu'il me donne une sortie sur 4 ou 5 colonnes nommées par défaut (en format-table) et m'afficher plus d'infos avec un format-list.

    Je voudrais bien poster un peu de mon code, mais je fais beaucoup de choses avec, je récupère des cellules Excel dans des variables $Projet, $Client... Et je souhaiterai une seule variable en sortie avec laquelle je puisse traiter ligne par ligne les informations récupérées, exemple : $InfoProjet[0] donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Projet        Client        volumétrie        Fin
    ------        ------        ----------        ---
    toto          tata          50 Go             2012
    Voilà j'espère avoir été assez clair, dans le cas contraire n'hésitez pas à me torturer de questions

    En tout cas déjà un merci pour avoir lu ce post et un grand merci si vous pouvez m'aider.

  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,
    Citation Envoyé par dj_max_69 Voir le message
    je n'arrive pas à créer un tableau avec des noms de colonnes.
    Cette structure se rapproche plus d'une hashtable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $H=@{
    Projet="toto";
    Client="tata";
    volumetrie="50";
    Fin="2012"
    }
    $h
    Citation Envoyé par dj_max_69 Voir le message
    En d'autres termes j'aimerai que mon script ressemble à un cmdlet et qu'il me donne une sortie sur 4 ou 5 colonnes nommées par défaut (en format-table) et m'afficher plus d'infos avec un format-list.
    Il faut déjà que ton script/fonction renvoi des objets personalisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function test {
      $H=@{
        Projet="toto";
        Client="tata";
        volumetrie="50";
        Fin="2012"
      }
      return New-Object PsObject -property $h
    }
    Test|FT
    Test|FL
    Ensuite l'usage des cmdlets de formatage s'en trouvera facilité.
    Citation Envoyé par dj_max_69 Voir le message
    Et je souhaiterai une seule variable en sortie
    On prend les mêmes et on recommence, mais pas de la même manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function New-MonObjet { 
    Param ($Projet,$Client,$Volumetrie,$Fin)
     New-Object PsObject -property @{
                                      Projet=$Projet;
                                      Client=$Client;
                                      volumétrie=$Volumetrie;
                                      Fin=$Fin
                                    }
    }
    $Result=1..4|
    Foreach {
      New-MonObjet "P$_" "C$_" (10*$_)  "201$_"
     }
    $Result|FT
    Je te laisse te "torturer" avec ça ;-)
    Au cas où, d'autres infos ici.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Par défaut
    Ok merci super , je vais continuer mon bricolage.
    Après je ne sais pas si je peux poster mon code dans ce post, pour soit inspirer d'autres personnes et éventuellement si ça intéresse des personnes pour l'optimiser.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Par défaut

    En fait je réouvre ce post, car avec l'aide de Laurent, j'arrive au même résultat qu'avec tous mes petits bidouillages, comme je les appelle.

    Visuellement ma variable de sortie donne cela :
    Projet Client volumétrie Fin
    ------ ------ ---------- ---
    {toto,info,zoo... {tata,tonton,tantine... {50 Go,120 Go,10 Go... {2012,2009,2010...

    et je souhaiterai avoir un affichage de type :

    Projet Client volumétrie Fin
    ------ ------ ---------- ---
    toto tata 50 Go 2012
    info tonton 120 Go 2009
    zoo tantine 10 Go 2010
    ecolo tintin 50 Go 2015

    Avez-vous une idée ou même un tuto qui traiterai de ce sujet ?

  5. #5
    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 dj_max_69 Voir le message
    Visuellement ma variable de sortie donne cela :
    Citation Envoyé par dj_max_69 Voir le message
    et je souhaiterai avoir un affichage de type :
    Il faut dissocier les deux.
    Le dernier exemple que je t'ai proposé permettait ce type d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                      volumétrie Client                        Projet                        Fin
                      ---------- ------                        ------                        ---
                              10 C1                            P1                            2011
                              20 C2                            P2                            2012
                              30 C3                            P3                            2013
                              40 C4                            P4                            2014
    Concernant ton résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Projet Client volumétrie Fin
    ------ ------ ---------- ---
    {toto,info,zoo... {tata,tonton,tantine... {50 Go,120 Go,10 Go... {2012,2009,2010...
    Il nous faudrait le code qui le génére et le code qui l'affiche.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Par défaut
    Re,

    Me prenant beaucoup la tête dessus, je me suis octroyé des vacances, d'où cette période sans réponse.

    J'ai épuré mon code pour pouvoir le poster.
    et concernant les infos récupérer dans l'Excel, si vous souhaitez tester :
    chain de caractère pour les variables : Projet, Client, CP, Description
    date pour : Debut et Fin (lorsque je récupère ces valeurs du tableur pour les injecter dans la variable Excel, je suis obligé d'utiliser le paramètre .text pour ne pas voir voir ma date comme un INT)
    Il se peut que des champs soient vide, mais ce point ne figure pas dans mon code (et ce n'est pas un souci).

    Code : 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
    function global:AuditProjetBeta
    { 
    	#Création de la variable InfoProjet qui résuméra l'ensemble des infos collectées
    	$InfoProjet = New-Object Object | `
    	Add-Member -MemberType NoteProperty -Name "Projet" -Value @("") -PassThru | `
    	Add-Member -MemberType NoteProperty -Name "Description" -Value @("") -PassThru | `
    	Add-Member -MemberType NoteProperty -Name "Client" -Value @("") -PassThru | `
    	Add-Member -MemberType NoteProperty -Name "Debut" -Value @("") -PassThru | `
    	Add-Member -MemberType NoteProperty -Name "Fin" -Value @("") -PassThru | `
    	Add-Member -MemberType NoteProperty -Name "CP" -Value @("") -PassThru
    	#Déclaration des serveurs de fichiers
    	$SrvFilePath = @("\\srvfile-1\Projet";"\\srvfile-2\Projet";"\\srvfile-3\Projet")
    	#Récupération des chemins des fiches Excel
    	$Projet = $(Get-ChildItem $SrvFilePath[0] | Select-Object Name) | % { $SrvFilePath[0] + "\" + $_.Name + "\00 - " + ($_.Name).Replace("prj-","") + "\" + $_.Name + ".xls" }
    	$Projet += $(Get-ChildItem $SrvFilePath[1] | Select-Object Name) | % { $SrvFilePath[1] + "\" + $_.Name + "\00 - " + ($_.Name).Replace("prj-","") + "\" + $_.Name + ".xls" }
    	$Projet += $(Get-ChildItem $SrvFilePath[2] | Select-Object Name) | % { $SrvFilePath[2] + "\" + $_.Name + "\00 - " + ($_.Name).Replace("prj-","") + "\" + $_.Name + ".xls" }
    	
    	for($i=0;$i -lt 10;$i++)
    	#ligne finale 
    	#for($i=0;$i -lt $Projet.Count;$i++)
    	{
    		#vérifie si une fiche existe 
    		if(Test-Path $Projet[$i])
    		{
    			#Création d'un object Excel
    				$ObjExcel = New-Object -ComObject Excel.Application
    			#Option pour ne pas afficher Excel mais simplement l'utiliser en background
    			$ObjExcel.Visible = $false
    			#Ouverture d'un fichier Excel
    			$ClasEXcel = $ObjExcel.Workbooks.Open($Projet[$i])
    			#Sélection de la première feuille
    			$FeuilExcel = $ClasEXcel.Worksheets.Item(1)
    			
    			#Récupération des infos du tableaur et injectées dans le tableau InfoProjet
    			$InfoProjet_temp += Add-Member -MemberType NoteProperty -Name "Projet" -Value $FeuilExcel.Cells.Item(3,5).Value2 -PassThru | `
    			Add-Member -MemberType NoteProperty -Name "Description" -Value $FeuilExcel.Cells.Item(4,5).Value2 -PassThru | `
    			Add-Member -MemberType NoteProperty -Name "Client" -Value $FeuilExcel.Cells.Item(5,5).Value2 -PassThru | `
    			Add-Member -MemberType NoteProperty -Name "Debut" -Value $FeuilExcel.Cells.Item(6,5).Text -PassThru | `
    			Add-Member -MemberType NoteProperty -Name "Fin" -Value $FeuilExcel.Cells.Item(7,5).Text -PassThru | `
    			Add-Member -MemberType NoteProperty -Name "CP" -Value $FeuilExcel.Cells.Item(9,5).Value2 -PassThru
    		
    			#Ferme tous les programmes Excel en tâche de fond
    			if(ps excel){kill -name excel}
    		}
    	}	
    	return $InfoProjet
    }
    Tout se déroule "bien" sauf sur le fameux affichage.
    J'ai bien essayé de faire des variables temporaires, puis les injecter dans mon tableau mais même résultat.

    Voilà qui m'enlèverai une grosse épine du pied, car j'utilise ce principe de tableau dans d'autre de mes codes, mes je bloque sur l'affichage à chaque fois.

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

Discussions similaires

  1. [XL-2007] Problème pour la création de tableau de classe
    Par Garruth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2014, 13h48
  2. Problème pour la création d'un graphique
    Par yabiyou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2008, 15h04
  3. [XI] Problème pour la création d'un rapport avec requête intégré
    Par doudoudetahiti dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 05/07/2007, 16h22
  4. Problème pour la création d'une fonction
    Par jipé95 dans le forum C
    Réponses: 5
    Dernier message: 10/12/2006, 14h28
  5. Problème pour centrer verticalement dans un tableau
    Par navis84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 18/07/2006, 16h56

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