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 :

Création d'un tableau et remplir une colonne par les valeurs d'un fichier [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    consultant infrastructure
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : consultant infrastructure
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Par défaut Création d'un tableau et remplir une colonne par les valeurs d'un fichier
    Bonjour à tous,


    Je créer un nouveau topic pour la deuxième partie de mon programme d'audit de VM.
    Le but final du script est de savoir si un référentiel de VM est présent ou non dans 3 environnements : AD, ZCM et Appsens

    Pour le moment j'ai:
    -un exports en txt de chaque liste de VM par environnement.
    -une liste de référence de toute les VM (VM.REF.txt )
    -un fichier de résultat de test de présence par environnement : VM.AD.txt, VM.ZCM.TXT, VM.Appsens.txt

    Le contenu des fichiers de test de présence se présente sous cette forme :
    ok
    ok
    nok
    ect ...

    et mon fichier de référence de VM se présente comme ca :
    wgh75
    wde78
    wzs78
    ect ...


    J'aimerai maintenant créer un tableau avec dans la première colonne nommé VM, la liste des VM dans VM.REF.txt. Dans la deuxième colonnenommé AD, la liste des résultats de VM.AD.TXT et pareil pour la 3 ème colonne avec VM.ZCM.txt et la 4ème colonne avec Appsens

    Ca ressemblerai à cela :

    VM AD ZCM Appsens
    wgh75 ok ok ok
    wde78 ok nok nok
    wzs78 nok ok ok



    J'ai essayer de cette facon avec déja 2 colonnes pour commencer, mais je CA ne marche pas :


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #création du tableau final
    $VMref= Get-Content VM.REF.txt 
    $VMZCM = Get-Content VM.ZCM.txt
     
    $ctvm = new-object PSObject
    foreach ($i in $VMref )
    {
    $ctvm | add-member -Name "VM" -MemberType NoteProperty -value $i -force
    }
    foreach ($j in $VMZCM )
    {
    $ctvm | add-member -Name ZCM -MemberType NoteProperty -value $j -force
    }


    Sinon, j'arrive a créer un tableau avec des colonnes nommé, mais je n'arrive pas a le remplir avec les valeurs d'un fichier

    HELP ME !

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut Francky_bullet

    voici une solution

    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
    $VMref = Get-Content c:\temp\VM.REF.txt 
    $VMZCM = Get-Content c:\temp\VM.ZCM.txt
    $VMAD = Get-Content c:\temp\VM.AD.TXT
    $VMAppsens = Get-Content c:\temp\VM.Appsens.txt 
    
    0..($VMref.Count-1) | foreach {
        $ctvm | add-member -Name "VM" -MemberType NoteProperty -value $i -force
        $info = @{}
        $info.Appsens = $VMAppsens[$_]
        $info.ZCM = $VMZCM[$_]
        $info.AD = $VMAD[$_]
        $info.VM = $VMref[$_]
        $ctvm = New-Object –TypeName PSObject –Prop $info
        Write-Output $ctvm
        }

  3. #3
    Membre habitué
    Homme Profil pro
    consultant infrastructure
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : consultant infrastructure
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Par défaut
    Oh merci, ça fonctionne !

    J'ai juste retirer la ligne $ctvm | add-member -Name "VM" -MemberType NoteProperty -value $i -force car je pense qu'elle est inutile, non ?

    En revanche, je me casse la tête pour avoir le bon ordre de mes colonnes, mais je n'y arrive pas ... j’aimerai que la colonne VM soit la première du tableau, mais je n'y arrive pas, même en rajoutant en amont des lignes de création de colonne dans l'ordre voulu :

    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
    .($VM.Count-1) | foreach {
        $info = @{
        $VM = ""
        AD = ""
        ZCM = ""
        Appsens = ""}
     
        $info.VM = $Applidis[$_]
        $info.Appsens = $VMAppsens[$_]
        $info.ZCM = $VMZCM[$_]
        $info.AD = $VMAD[$_]
     
        $ctvm = New-Object –TypeName PSObject –Prop $info
        Write-Output $ctvm
        }

  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
    Salut,
    Citation Envoyé par Francky_bullet Voir le message
    En revanche, je me casse la tête pour avoir le bon ordre de mes colonnes,
    On manipule des objets...
    Une hashtable ne respecte pas l'ordre d'insertion pour ce faire il faut préciser l'attribut [Ordered] :
    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
     
    $info = [ordered]@{
     VM = ""
     AD = ""
     ZCM = ""
     Appsens = ""
    }
    $info
     
    #Name                           Value
    #----                           -----
    #VM
    #AD
    #ZCM
    #Appsens
    Attention à l'effet de bord ici :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $vm='test'
    $info = @{
     $VM = ""
     AD = ""
     ZCM = ""
     Appsens = ""
    }
    $Info

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    J'ai juste retirer la ligne "$ctvm | add-member -Name "VM" -MemberType NoteProperty -value $i -force" car je pense qu'elle est inutile, non ?
    oui tu a tous a fais raison !!

    pour l'ordre tu peut aussi faire un select
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctvm | select VM,  AD,  ZCM, Appsens
    mais j'aime bien la solution de Laurent que je connaissais pas !

  6. #6
    Membre habitué
    Homme Profil pro
    consultant infrastructure
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : consultant infrastructure
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Par défaut
    Citation Envoyé par Francky_bullet Voir le message
    Oh merci, ça fonctionne !

    J'ai juste retirer la ligne "$ctvm | add-member -Name "VM" -MemberType NoteProperty -value $i -force" car je pense qu'elle est inutile, non ?

    En revanche, je me casse la tête pour avoir le bon ordre de mes colonnes, mais je n'y arrive pas ... j’aimerai que la colonne VM soit la première du tableau, mais je n'y arrive pas, même en rajoutant en amont des lignes de création de colonne dans l'ordre voulu :

    .($VM.Count-1) | foreach {
    $info = @{
    $VM = ""
    AD = ""
    ZCM = ""
    Appsens = ""}

    $info.VM = $Applidis[$_]
    $info.Appsens = $VMAppsens[$_]
    $info.ZCM = $VMZCM[$_]
    $info.AD = $VMAD[$_]

    $ctvm = New-Object –TypeName PSObject –Prop $info
    Write-Output $ctvm
    }
    En fait, j'ai crié victoire trop vite.
    LE tableau s'affiche bien avec une cumulation de write-host, mais je suis incapable d'avoir le même résultat dans un fichier ... txt ou csv, peu importe, une idée ?

  7. #7
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    comment écris tu dans le fichier ?

    LE tableau s'affiche bien avec une cumulation de write-host, mais je suis incapable d'avoir le même résultat dans un fichier ... txt ou csv, peu importe, une idée ?
    pour info les write-host n'écrive que sur la console !!
    il faut utiliser write-output

    pour reprendre mon précédent script avec les modif proposé par Laurent :
    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
    $VMref = Get-Content c:\temp\VM.REF.txt 
    $VMZCM = Get-Content c:\temp\VM.ZCM.txt
    $VMAD = Get-Content c:\temp\VM.AD.TXT
    $VMAppsens = Get-Content c:\temp\VM.Appsens.txt 
     
    0..($VMref.Count-1) | foreach {
        $info = [ordered]@{
            VM = $VMref[$_]
            AD = $VMAD[$_]
            ZCM = $VMZCM[$_]
            Appsens = $VMAppsens[$_]
            }
        $ctvm = New-Object –TypeName PSObject –Prop $info
        Write-Output $ctvm
        } | out-file "c:\temp\resultat.txt"

  8. #8
    Membre habitué
    Homme Profil pro
    consultant infrastructure
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : consultant infrastructure
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Par défaut
    yes, ca fonctionne ! j'avais pas penser a faire un pipe directement à la sortie du foreach, c'est énorme.

  9. #9
    Membre habitué
    Homme Profil pro
    consultant infrastructure
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : consultant infrastructure
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Par défaut
    Je passe le topic en résolu, merci à tous pour votre aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/06/2011, 10h51
  2. Remplir une colonne par espaces
    Par walacouper dans le forum Excel
    Réponses: 6
    Dernier message: 12/06/2009, 11h33
  3. Réponses: 4
    Dernier message: 28/04/2009, 16h32
  4. Réponses: 2
    Dernier message: 11/05/2006, 22h21

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