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 :

Ajout valeur dans un tableau


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Ajout valeur dans un tableau
    Hello all !

    Je suis actuellement sur un script et je patauge un peu pour une partie de celui-ci.

    Je cherche à ajouter des valeurs d'une commande dans un tableau de ce type :

    Voici le code permettant cela :

    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
    #Déclaration des variables
     
    $server = "192.168.12.13"
    $sftpsession = New-SFTPsession -ComputerName $server -Credential root
    $source = "/tmp/backups/"
    $date = Get-Date -Uformat "%Y%m%d%H%M"
     
    #Création tableau
     
    $table = New-Object system.Data.DataTable
    $col1 = New-Object system.Data.DataColumn zip,([object])
    $col2 = New-Object system.Data.DataColumn hash,([object])
    $table.columns.add($col1)
    $table.columns.add($col2)
    $row = $table.NewRow()
     
    # Mettre éléments dans le tableau
     
    foreach ($file in (Get-SFTPChildItem $sftpsession -Path $source | Where-Object {$_.Name -notlike "*."} | Sort-Object)) {
     
        If ($file.Name -like "*.zip"){
     
             $row.zip = $file.Name
     
     
        }
        Elseif ($file.Name -like "*.txt") {
     
            $row.hash = $file.Name
     
        }
     
        $table.Rows.Add($row)
     
    }

    Globalement ça marche plutôt bien, voici le résultat :

    PS C:\Users\Administrator\Desktop> $table
    
    zip       hash     
    ---       ----     
    test2.zip test2.txt
    Sauf qu'il ne met pas de ligne pour le test1.zip et test1.txt voici le message d'erreur :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception calling "Add" with "1" argument(s): "This row already belongs to this table."
    At C:\Users\Administrator\Desktop\script automatisation.ps1:35 char:5
    +     $table.Rows.Add($row)
    +     ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : ArgumentException

    Je comprends qu'il est pas content car la ligne existe déjà mais j'ai tenté de mettre la ligne $row = $table.NewRow() après la boucle ou pendant. Plus d'erreur mais cela donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    zip       hash     
    ---       ----     
              test1.txt
    test1.zip          
              test2.txt
    test2.zip
    Si vous avez une idée je suis preneur :)

    Merci d'avance !
    Bon week-end.
    Dernière modification par Invité ; 18/05/2019 à 00h15. Motif: Amélioration de la mise en forme

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Est ce une volonté besoin ou autre qui motive ton choix de System.Data.DataColumn ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Est ce une volonté besoin ou autre qui motive ton choix de System.Data.DataColumn ?
    Non pas forcément, j'ai repris cela sur un site et qui était plutôt facile d'utilisation. Si une autre méthode existe je suis preneur sachant que par la suite je dois exploiter les résultats ligne par ligne derrière.

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $array = @()
     
    $array += [PSCustomObject] @{
            zip = "test1.zip"
            hash = "test1.txt"}
     
    $array += [PSCustomObject] @{
            zip = "test2.zip"
            hash = "test2.txt"}
     
    $array

    Mais je pense que c'est plus un problème de logique que tu as et le résultat semble cohérent avec ce que tu lui demande.
    If elseif -> fait l'un ou l'autre. C'est ce que l'on voit

    Attention à ceci Where-Object {$_.Name -notlike "*."}, tu veux tout ce qui ne finit pas par un point ?
    A savoir qu'un fichier peux ne pas avoir d'extension et un dossier peux comporter un point.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour ton retour.

    J'ai déjà vu le array. Le problème c'est que je ne connais pas les valeurs au départ. Le nom du zip et du txt sont récupéré par la commande Get-SFTPChildItem $sftpsession -Path $source.

    J'ai pensé à ça :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach ($file in (Get-SFTPChildItem $sftpsession -Path $source | Where-Object {$_.Name -notlike "*/."} | Sort-Object)) {
     
        If ($file.Name -like "*.zip"){
     
             $array += [PSCustomObject] @{
            zip = "$file.BaseName"
    }
     
    Elseif ($file.Name -like "*.txt") {
     
    $array += [PSCustomObject] @{
            hash = "$file.BaseName"}
    }

    Le problème va être de les mettre sur la même ligne par la suite. Dans cette base je suis pas sûr que cela fonctionne :/

    Pour le Where-Object, comme le serveur distant est un linux, la commande Get-SFTPChildItem $sftpsession -Path $source me remonte également les dossiers /. et /.. c'est vraiment juste par sécurité. J'avais fais la modification par la suite mais j'ai pas mis à jour désolé.

    EDIT : Je viens de tester le code suivant

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach ($file in (Get-SFTPChildItem $sftpsession -Path $source | Where-Object {$_.FullName -notlike "*/.*"} | Sort-Object)) {
     
    If ($file.Name -like "*.zip") {
     
    $array += [PSCustomObject] @{zip = "$($file.Name)
    }
     
    Elseif ($file.Name -like "*.txt") {
     
    $array += [PSCustomObject] @{txt = "$($file.Name)"
    }
    }
    }

    Cela me renvois le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    txt
    ---
    test1.txt
    
    test2.txt
    J'ai évidement testé sans le ElseIf mais cela revient au même...
    Dernière modification par Invité ; 20/05/2019 à 22h45. Motif: Coloration syntaxique [CODE=PowerShell] ... [/CODE]

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu peux imaginer un truc un peu fou comme ceci
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach ($file in (Get-SFTPChildItem $sftpsession -Path $source | Where-Object {$_.FullName -notlike "*/.*"} | Sort-Object)) {
    	If ($file.Name -like "*.zip") {
    		$zip = $file.Name
    	}
    	Elseif ($file.Name -like "*.txt") {
    		$hash = $file.Name
    	}
     
    	$array += [PSCustomObject] @{
    			zip = $zip
    			hash = $hash}
    }

    Mais ... je me cite
    Mais je pense que c'est plus un problème de logique que tu as et le résultat semble cohérent avec ce que tu lui demande.
    If elseif -> fait l'un ou l'autre. C'est ce que l'on voit
    En fait, je ne comprend pas la finalité je t'aide juste sur le code mais je ne sais pas ce que c'est sensé vouloir dire ou faire.

Discussions similaires

  1. Ajout et affichage de valeurs dans un tableau
    Par shahir dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2013, 23h13
  2. Ajouter une valeur dans un tableau au clic
    Par schtroll dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/12/2012, 13h35
  3. Ajouter des valeurs dans un tableau
    Par Mrlaurent90 dans le forum BIRT
    Réponses: 4
    Dernier message: 09/03/2011, 10h55
  4. Ajout valeur dans un tableau automatiquement
    Par michparmentier dans le forum Excel
    Réponses: 4
    Dernier message: 04/04/2007, 10h50
  5. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41

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