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 :

Boucle avec WMIC [Batch]


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
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut Boucle avec WMIC
    Bonjour,

    Je souhaite récupérer la taille de la RAM à partir d'une liste de postes (Postes.ini) et écrire le résultat dans un fichier CSV.

    J'utilise donc une boucle pour tester par un ping la présence du poste sur le réseau et ensuite lancer la commande wmic :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    for /f %%i in (Postes.ini) do (
    ping -n 1 %%i>Nul
    if errorlevel 1 echo %%i;ECHEC
    if not errorlevel 1 wmic /NODE:%%i path Win32_PhysicalMemory get Capacity
    )
    Mon problème est que je n'arrive pas à formater le résultat dans le csv comme je le souhaite :
    POSTE1;2147483648
    POSTE2;ECHEC
    POSTE3;4294967296

    Merci pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Tu devrais faire ça en Powershell, c'est ultra plus simple pour travailler avec les fichier CSV.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    Merci pour l'info mais j'ai déjà du mal avec les scripts Batch alors avec Powershell que je connais pas du tout...

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Powershell est plus simple que batch pour pas mal de chose !

    Avec powerhsell, admettons un fichier CSV au départ constitué comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MachineName;RamQty
    PC1
    PC2
    PC3
    PC4
    PC5
    ...
    Tu ouvre ton fichier CSV avec Import-CSV dans une variable
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $pcs = Import-CSV -Delimiter ';' .\PC.csv
    Ensuite tu parcours tes PC avec une boucle For Each et tu fais la requête WMI :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($pc in $pcs) {
      if(Test-Connection $pc.MachineName -Quiet -count 2) { $pc.RamQty = (Get-WMIObject -Class win32_physicalmemory -Computer $pc.MachineName | Measure-Object -Property Capacity -Sum).sum }
      else { $pc.RamQty = "Echec" }
    }
    Et enfin tu réexport en CSV :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $pcs | Export-Csv .\PC.csv -Delimiter ';' -NoTypeInformation

    Ce qui au global donne :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $pcs = Import-CSV -Delimiter ';' .\PC.csv
    foreach($pc in $pcs) {
      if(Test-Connection $pc.MachineName -Quiet -count 2) { $pc.RamQty = (Get-WMIObject -Class win32_physicalmemory -Computer $pc.MachineName | Measure-Object -Property Capacity -Sum).sum }
      else { $pc.RamQty = "Echec" }
    }
    $pcs | Export-Csv .\PC.csv -Delimiter ';' -NoTypeInformation

    Et si jamais tu le fait depuis un compte qui n'as pas forcément les droits sur les PC, tu peux rajouter une demande de credentials avec $cred = Get-Credential
    Et sur le Get-WMIObject => Get-WMIObject -Class win32_physicalmemory -Computer $pc -Credential $cred

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    OK, ce script a parfaitement fonctionné. Merci pour ton aide.

    Est-il possible de voir à l’écran l'avancé du script, c'est-à-dire, le test du ping et la quantité de mémoire trouvée pour chacun des postes ?

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bien sur en rajoutant :
    ProgressBar :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Progress -Activity 'Récupération de la quantité de RAM' -CurrentOperation $pc.MachineName -PercentComplete $(++$i/$pcs.Count*100)
    Et info trouvé :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Host $pc.MachineName : $pc.RamQty
    Comme ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $pcs = Import-CSV -Delimiter ';' .\PC.csv
    foreach($pc in $pcs) {
      Write-Progress -Activity 'Récupération de la quantité de RAM' -CurrentOperation $pc.MachineName -PercentComplete $(++$i/$pcs.Count*100)
      if(Test-Connection $pc.MachineName -Quiet -count 2) { $pc.RamQty = (Get-WMIObject -Class win32_physicalmemory -Computer $pc.MachineName | Measure-Object -Property Capacity -Sum).sum }
      else { $pc.RamQty = "Echec" }
      Write-Host $pc.MachineName : $pc.RamQty
    }
    $pcs | Export-Csv .\PC.csv -Delimiter ';' -NoTypeInformation

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    Merci. Tu as tout bon.

    Je pense que je vais devoir me mettre au PowerShell.

  8. #8
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Oh que oui
    Tu peux faire énormément de chose de manière assez simple.
    Pour moi incomparable avec Batch (qui ne permet pas grand chose) et bien plus puissant que VBS !

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

Discussions similaires

  1. [DEBUTANT] sortir d'une boucle avec un touche particulière
    Par thibouille dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 06h44
  2. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  3. Boucle avec un TIBDataSet
    Par SebCBien dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/09/2004, 17h33
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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