Jacques's profilejanelPhotosBlogLists Tools Help
    January 31

    Plus de 10 000 visites déjà...

    En jetant un œil sur les statistiques de mon blog, je viens de constater que cette semaine la barre des 10 000 pages visitées a été dépassée. Ce blog a démarré en avril 2006, et est réellement actif depuis mai, donc cela fait 10 000 visites en 9 mois soit une moyenne d’un peu plus de 1000 visites par mois. C’est sans doute très peu par rapport à la popularité d’un blog moyen, mais j’avoue que ce chiffre m’impressionne déjà fortement. Alors imaginez ma réaction quand j’aurai ce nombre de visites chaque jour ! J
     
    Bon, cela dit je ne sais pas quel crédit apporter à un tel chiffre, non pas qu’il soit faux, mais faute d’informations plus détaillées je ne peux pas vraiment en tirer des enseignements sur la population qui accède à mon blog… c’est-à-dire vous (et tous les autres). Tant pis.
     
    Tout ce que j’espère c’est au moins apporter un petit quelque chose. N’hésitez pas à me faire savoir par un commentaire rapide ce que ce blog vous apporte, ou ce que vous souhaiteriez y trouver qu’il ne vous apporte pas.
     
    A bientôt,
    Janel

    Windows PowerShell 1.0 pour Windows Vista

    Chose promise, chose due. Windows PowerShell 1.0 est disponible pour Windows Vista en même temps que celui-ci est disponible pour le grand public. Pour tous les liens nécessaires, je vous renvoie à l’annonce faite il y a deux jours sur le blog de l’équipe PowerShell :
     
     
    Profitez-en bien !
     
    Janel
    January 25

    Explorez votre parc avec PowerShell

    Une des forces de Windows PowerShell est de fournir plusieurs voies d’accès aux ressources de Windows, notamment Windows Management Instrumentation (WMI). WMI est très utile pour obtenir des informations détaillées et précises sur la configuration et l’état d’un système. On peut par exemple avoir des informations sur les disques logiques en tapant la commande suivante :
     
    PS> get-wmiobject win32_logicaldisk
     
    DeviceID     : C:
    DriveType    : 3
    ProviderName :
    FreeSpace    : 36626391040
    Size         : 80024170496
    VolumeName   :
     
    DeviceID     : D:
    DriveType    : 5
    ProviderName :
    FreeSpace    : 0
    Size         : 8369137664
    VolumeName   : DVDVolume
     
    DeviceID     : E:
    DriveType    : 2
    etc…
     
    La commandelette get-wmiobject peut être remplacée par son alias standard gwmi. C’est d’ailleurs lui que j’utiliserai à la place de get-wmiobject pour le reste de ce billet.
     
    J’aurais pu filtrer les résultats pour ne voir que les informations sur le disque C: en ajoutant un filtre :
     
    PS> gwmi win32_logicaldisk -filter "DeviceID='C:'"
     
    DeviceID     : C:
    DriveType    : 3
    ProviderName :
    FreeSpace    : 36625944576
    Size         : 80024170496
    VolumeName   :
     
    Ou bien, sachant que les disques logiques de type 3 sont des disques non amovibles, je peux exclure tous les autres types de disque (CD/DVD/USB/etc) :
     
    PS> gwmi win32_logicaldisk -filter "DriveType=3"
     
    DeviceID     : C:
    DriveType    : 3
    ProviderName :
    FreeSpace    : 36625788928
    Size         : 80024170496
    VolumeName   :
     
    Bien. Mais l’administrateur système que vous êtes ne manquera pas de se demander comment il pourrait exécuter la même requête sur l’ensemble des postes ou des serveurs de son réseau. O joie, WMI est conçu pour l’interrogation de systèmes distants, et PowerShell suit avec le paramètre -computer :
     
    PS> gwmi win32_logicaldisk -filter "DriveType=3" -computer .
     
    DeviceID     : C:
    <vous connaissez la suite…>
     
    Notez le point après -computer. Ce point indique l’ordinateur local. Remplacez-le par le nom d’hôte du système distant.
     
    L’immense avantage de cette méthode est qu’elle vous permet d’utiliser PowerShell sur des systèmes sur lesquels il n’est pas installé. Mais comment vraiment profiter de PowerShell ? Quelques exemples à suivre…
     
    Petite parenthèse, dans le cas où l’on sait qu’on utilisera un filtre WMI pour ne récupérer qu'un objet (par exemple, le disque C:), on peut également utiliser cette notation:
     
     
    DeviceID     : C:
    DriveType    : 3
    <bla bla bla, on connaît…>
     
    Si on ne veut qu'une valeur particulière (par exemple l'espace libre) on pourra écrire ceci:
     
    PS> $c.freespace
    36628508672
     
    Petit rappel, on peut utiliser les alias KB, MB et GB quand on manipule des nombres, spécialement quand il s’agit d’octets:
     
    PS> $c.freespace/1MB
    34931,66796875
     
    Et pour arrondir le résultat, on peut utiliser la méthode statique Round() de la classe [System.Math], que l’on peut abréger en [math] :
     
    PS> [math]::round($c.freespace/1MB)
    34932
     
    Fin de la parenthèse. Revenons à nos systèmes distants. Si on a une liste de PC dans un fichier texte, on pourra énumérer les espaces totaux et libres de toutes leurs partitions avec le script suivant:
     
    -- get-freespace.ps1
    get-content $args[0] | foreach {
      gwmi win32_logicaldisk -filter "DriveType=3" -computer $_} |
      format-table @{l="Nom";e={$_.__Server}},
        @{l="Volume";e={$_.DeviceId}},
        @{l="Total (Mo)";e={[math]::round($_.Size/1MB)}},
        @{l="Libre (Mo)";e={[math]::round($_.FreeSpace/1MB)}} –a
    }
     
    L’essentiel du travail fourni par le script consiste à afficher le résultat sous forme d’une table facilement lisible :
     
    PS> get-freespace monparc.txt
     
    Nom        Volume Total (Mo) Libre (Mo)
    ---        ------ ---------- ----------
    JBARATHO01 C:          76317      34931
    JBARATHO02 C:          38152       1555
    etc…
     
    En fait, ce script n’est pas super nickel en matière de « citoyenneté PowerShell ». Il impose un format d’entrée (un fichier texte avec un nom d’ordinateur par ligne) et un type de sortie (une table avec en-tête, tirets séparateurs et les informations à suivre), ce qui limite considérablement les possibilités d’intégrer ce script à d’autres commandes en ligne. Je reviendrai dans un prochain billet sur les techniques à utiliser dans un script PowerShell pour améliorer sa « citoyenneté ». Pour l’heure, vous devriez déjà trouver matière à explorer WMI et PowerShell pour vos propres besoins d'exploration et d'administration de votre parc, du moins je l’espère.
     
    Janel
    January 17

    Webcast Windows PowerShell en français

    Vu sur le site français du Script Center :
     
    Webcast TechNet Live : Windows PowerShell
    Windows PowerShell permet une grande automatisation pour la plupart des tâches d'administration au travers d’un ensemble de « commande » visant à effectuer des tâches d'administration système courantes. Plus puissant que le shell standard de Windows, PowerShell en est toutefois un complément. Parmi les 130 « petites commandes » proposés par PowerShell, découvrez dans cette session, comment superviser la gestion de services, de processus, de journaux d'événements ou encore celle de la base de registre et bien plus encore. Ce webcast TechNet sera animé en direct par Patrick Guimonet et Fabrice Meillon (Architectes Infrastructure) le mardi 13 février de 11h à 12h, et sera suivi d’une session de chat pour poser vos questions.
     
    Youpi !
     
    Janel

    Bibliothèque Script Center maintenant en ligne en français!

    C’est avec un réel plaisir que je voulais vous signaler la mise en ligne de la bibliothèque Script Center en français :
     
     
    Vous pourrez enfin retrouver d’un coup d’un seul l’ensemble des articles traduits du Script Center, y compris les réponses aux questions posées à Monsieur Script et au Docteur Scripto.
     
    Un grand merci à l’équipe TechNet de Microsoft France !
     
    Janel 
    January 14

    Un petit chrono dans la tête

    Sur une liste de discussion interne quelqu’un a décrit comment il avait conçu pour ses propres besoins un chronomètre en une simple ligne de code PowerShell :
     
    measure-command {read-host "Appuyez sur Entrée pour arrêter le chrono"}
     
    Simple et efficace, non ? L’essayer c’est l’adopter, surtout si – comme moi – vous avez passé des heures à jouer avec un vrai chronomètre à essayer de l’arrêter pile à 1 seconde, ou à 5 secondes, bref vous voyez le principe. Mais nul doute que vous aurez des usages plus intelligents et surtout plus utiles d’un tel chronomètre toujours à portée de main.
     
    Pour un usage vraiment pratique en toute circonstance j’ai très légèrement amélioré le code original. L’amélioration principale consiste à introduire une étape de démarrage supplémentaire. La raison en est que lorsque vous revenez dans une session PowerShell laissée non utilisée pendant un certain temps, la saisie de texte et immédiate mais l’exécution de la première commande prend quelques secondes comme si PowerShell sortait de veille, sans doute le temps pour Windows de recharger des éléments du Framework .NET. Dans ce cas-là le lancement du chrono n’est pas fiable si l’on considère qu’il a démarré à la validation de la commande par l’appui de la touche Entrée. D’où l’introduction d’une étape explicite de démarrage du chrono, étape que l’on peut toujours désactiver avec le switch $now qui démarrera immédiatement le chrono si l’on sait qu’il n’y aura pas d’effet « sortie de veille ».
     
    function start-watch {
      param ([string]$unit = "TotalSeconds", [switch]$now)
      if (!$now) {
        read-host "Appuyez sur Entrée pour démarrer le chrono"
      }
      $time = (measure-command {read-host "Appuyez sur Entrée pour arrêter le chrono"}).$unit
      "$time $unit"
    }
     
    Vous aurez également noté un deuxième paramètre, $unit, qui permet de préciser l’unité de temps avec laquelle on veut afficher le résultat (par défaut TotalSeconds). Ce paramètre n’est pas forcément très utile, mais je l’ai ajouté pour illustrer le fait que l’on peut facilement utiliser une variable pour préciser une propriété (ou une méthode).
     
    Janel
    January 04

    Naissance de PowerShell-Scripting.com

    Arnaud Petitjean a annoncé sur le newsgroup microsoft.public.windows.powershell la naissance du premier site français entièrement consacré à Windows PowerShell :
     
     
    Le site contient des tutoriels, un entrepôt de scripts résolument orientés administration, et de nombreuses autres informations. Dans la rubrique des news, je viens d’ailleurs de relever une annonce de la plus haute importance :
     
     
    Merci à Arnaud pour cette initiative, et longue vie à Windows PowerShell !
     
    Janel
    January 01

    Bonne année 2007!

    Quand vous aurez fait le tour des vœux à la famille, aux amis, aux collègues et à tout le voisinage, il vous restera encore votre Windows PowerShell pour vous souhaiter une bonne année 2007 :
     
    PS> "bonne année 2007 !" | out-voice
     
    Si vous vous demandez d’où sort cette commande out-voice, reportez-vous à l’un de mes premiers billets sur ce blog, en mai de l’année dernière (je veux parler de 2006 bien sûr) :
     
     
    Et si votre système ne parle pas français mais uniquement l’anglais, vous pouvez quand même lui faire prononcer ces quelques mots dans un français approximatif :
     
    PS> "bonanne, demil-set !" | out-voice
     
    Ne me remerciez pas, c’est tout naturel. Et surtout, tous mes vœux de bonheur et de bonne santé.
     
    Janel