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 :

Amélioration de script ? [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut Amélioration de script ?
    Bonjour !

    Tout d'abord, sachez que je suis un débutant en scripting, un vrai de vrai qui souhaite pourtant mettre les deux pieds dans la cour des grands !
    le script suivant permet d’afficher plusieurs information sur tous les drives d'un serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    param ($computer = ".")
    get-wmiobject  -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
    select-object @{e={$_.systemname};n="Système " },
                  @{e={$_.name};n="Disque"},
                  @{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
                  @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"},
                  @{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}
    mon souci c'est que le résultat s'affiche avec retour à la ligne

    Système : SERVEUR_A
    Volume : C:
    Capacité (Go): 100
    Disponible (Go): 20
    (%) : 20

    j'aimerais avoir un résultat sur une seul ligne vu que j'ai plusieurs serveur à tester en m^me temps

    Système Volume Capacité (Go) Disponible (Go) (%)
    ------- ------ ------------- --------------- ---
    SERVEUR_A C: 100 20 20

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    Quand j'enlève la virgule à la fin de l'avant dernier ligne @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"} j'ai le résultat souhaité mais sans l’exécution de la dernière ligne ????

  3. #3
    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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Ajoute Format-Table et tu peux regrouper avec le paramètre -GroupBy

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    Merci bcp !!!!!! ça marche sans un group by

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    param ($computer = ".")
    get-wmiobject  -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
    Format-Table  @{e={$_.systemname};n="Système " },
                  @{e={$_.name};n="Disque"},
                  @{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
                  @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"},
                  @{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    j'essaie maintenant d'améliorer le script pour lire d'un fichier texte ou il y aura la liste de tous les serveurs et exporter le résultat dans un fichier csv

    Voila mon essaie :
    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
    [cmdletbinding()]
    param (
     [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [string[]]$ComputerName = $env:computername
    )            
    
    begin {}
    process {
     foreach ($Computer in $ComputerName) {
    get-wmiobject  -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
    Format-Table @{e={$_.systemname};n="Système " },
                  @{e={$_.name};n="Disque"},
                  @{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
                  @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"},
                  @{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}
    }            
    }
    end {}
    je l’exécute avec la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get-Content computers.txt | .\get-freespace.ps1 | Export-Csv Result.csv -notype
    Mais ça ne marche pas


    Merci d'avance pour votre aide

  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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Avec PS il faut formater en dernier recours, le Select-Object d'origine était à la bonne place.
    Format-Table émet des objets de formatage interprétés par la console, ils n'ont donc plus rien avoir avec ceux d'origine.

    Ensuite dans le bloc process :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($Computer in $ComputerName)
    A moins de vouloir traiter un tableau de tableaux, l'itération sur une string suffit:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    param (
     [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [string]$ComputerName = $env:computername
    )
     
    process {
     get-wmiobject  -computer $computer win32_logicaldisk | ...

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Merci pour ton retour !! J'ai essayé d'appliquer ce que j'ai compris mais ça ne marche toujours pas
    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
    [cmdletbinding()]
    param (
     [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [string]$ComputerName = $env:computername
    )            
    
    begin {}
    process {
     foreach ($Computer in $ComputerName) {
    get-wmiobject  -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
    select-object @{e={$_.systemname};n="Système " },
                  @{e={$_.name};n="Disque"},
                  @{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
                  @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"},
                  @{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}
    }            
    }
    end {}

  8. #8
    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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Essaie ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    process {
     get-wmiobject  -computer $ComputerName win32_logicaldisk ...
    Citation Envoyé par Med_be Voir le message
    ça ne marche toujours pas
    Si c'est tjr le cas il te faut être plus prècis.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    MErci !!!
    ça marche très bien , je n'ai pas compris au début qu'il ne fallait pas utiliser foreach ......

    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
    [cmdletbinding()]
    param (
     [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [string]$ComputerName = $env:computername
    )            
    
    
    process {
    
    get-wmiobject  -computer $ComputerName win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
    select-object @{e={$_.systemname};n="Système " },
                  @{e={$_.name};n="Disque"},
                  @{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
                  @{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"},
                  @{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}
    }

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

Discussions similaires

  1. Amélioration de script
    Par djaibi dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2011, 20h03
  2. problème d'amélioration de script dans une galerie
    Par lirisnocif dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 24/03/2009, 15h34
  3. [Galerie] Un peu d'aide pour améliorer un script
    Par ambigua dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 21/02/2008, 22h32
  4. Appel d'offre pour une amélioration de script
    Par Hamzaxxx dans le forum Autres
    Réponses: 0
    Dernier message: 05/12/2007, 14h14
  5. Réponses: 6
    Dernier message: 23/01/2007, 17h20

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