Actions











Windows PowerShell

Écrit le 16/08/2007 @ 17:36 par blanalex

Informatique - ProgrammationVoici un nouveau langage de programmation pour scripter Windows, il peut remplacer les batch-file et le command-prompt interactif (cmd.exe). Il s'agit de Windows PowerShell, il fonctionne sur WinXP, W2k3, Vista (downloads gratuits) et il va être inclus dans Windows Server 2008. Ce qui est intéressant, c'est que contrairement à disont les batch file habituels ou les scripts Unix, les commandes retournent des objets et non pas juste du texte. On peut donc appeller des méthodes sur ces objets au lieu d'essayer de filtrer du texte.

Avec Powershell, on peut naviguer avec la base de registre, faire appel aux API de Windows, on peut utiliser les exécutables de Windows, etc.

J'ai eu le temps de zigonner un brin avec, et voici quelques exemples:

  • Supprimer le démarrage de Quicktime dans le registre (en bleu: les commandes tappées)

    Windows PowerShell
    
    Copyright (C) 2006 Microsoft Corporation. All rights reserved.

    PS C:\Windows\System32> cd hklm:\software\microsoft\windows\currentversion\run
    PS HKLM:\software\microsoft\windows\currentversion\run> Get-ItemProperty .


    PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run
    PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion
    PSChildName : run
    PSDrive : HKLM
    PSProvider : Microsoft.PowerShell.Core\Registry
    Windows Defender : C:\Program Files\Windows Defender\MSASCui.exe -hide
    SynTPEnh : C:\Program Files\Synaptics\SynTP\SynTPEnh.exe
    PSQLLauncher : "C:\Program Files\Protector Suite QL\launcher.exe" /startup
    TPwrMain : C:\Program Files\TOSHIBA\Power Saver\TPwrMain.EXE
    ShStatEXE : "C:\Program Files\McAfee\VirusScan Enterprise\SHSTAT.EXE" /STANDALONE
    McAfeeUpdaterUI : "C:\Program Files\McAfee\Common Framework\UdaterUI.exe" /StartedFromRunKey
    ThpSrv : C:\Windows\system32\thpsrv /logon
    QuickTime Task : "C:\Program Files\QuickTime\QTTask.exe" -atboottime
    iTunesHelper : "C:\Program Files\iTunes\iTunesHelper.exe"


    PS HKLM:\software\microsoft\windows\currentversion\run> Remove-ItemProperty . "QuickTime Task"
    PS HKLM:\software\microsoft\windows\currentversion\run>


  • Vérifier la version d'un programme qui s'exécute et lancer un installateur s'il s'agit d'une vieille version (script):

    # pcproviderupdate.ps1
    
    # Vérifie si le serveur d'impression secondaire de PaperCut est présent et le met à jour
    # Alexandre Blanchette <blancha@csvdc.qc.ca>
    # 2007/08/15

    $newpcversion = "7, 3, 0, 4874"

    $pcprint = get-process pc-print -ErrorAction SilentlyContinue

    if ($pcprint) {
    if ($pcprint.ProductVersion.Equals($newpcversion)) {
    write-output "Version courante"
    } else {
    write-output "Installation de la nouvelle version"
    new-psdrive setup filesystem \\cea2003\msidist$\pc-print | out-null
    setup:\pcng-setup-7.3.4874.exe /COMPONENTS="prov_print" /VERYSILENT
    }
    } else {
    write-output "Papercut print provider ne fonctionne pas en ce moment."
    }


  • La preuve que c'est vraiment des objets et non pas juste du texte

    PS C:\Users\blancha> get-wmiobject Win32_Printer
    
    Location :
    Name : Sutton
    PrinterState : 0
    PrinterStatus : 3
    ShareName :
    SystemName : 57ATIF432X04P
    .
    .
    .
    Location : 2 ième étage, près de la machine à café
    Name : \\casrvimp\RICOH Aficio 2045e PCL 6 (SRH)
    PrinterState : 0
    PrinterStatus : 2
    ShareName : CA-SRH-2045
    SystemName : \\casrvimp

    PS C:\Users\blancha> $imprimantes = get-wmiobject Win32_Printer
    PS C:\Users\blancha> $imprimantes.count
    7

    PS C:\Users\blancha> $imprimantes[6]
    Location : 2 ième étage, près de la machine à café
    Name : \\casrvimp\RICOH Aficio 2045e PCL 6 (SRH)
    PrinterState : 0
    PrinterStatus : 2
    ShareName : CA-SRH-2045
    SystemName : \\casrvimp

    PS C:\Users\blancha> $imprimantes[6] | Format-list *
    Status : Unknown
    Name : \\casrvimp\RICOH Aficio 2045e PCL 6 (SRH)
    __GENUS : 2
    __CLASS : Win32_Printer
    __SUPERCLASS : CIM_Printer
    __DYNASTY : CIM_ManagedSystemElement
    __RELPATH : Win32_Printer.DeviceID="\\\\casrvimp\\RICOH Aficio 2045e PCL 6 (SRH)"
    __PROPERTY_COUNT : 86
    __DERIVATION : {CIM_Printer, CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
    __SERVER : 57ATIF432X04P
    __NAMESPACE : root\cimv2
    __PATH : \\57ATIF432X04P\root\cimv2:Win32_Printer.DeviceID="\\\\casrvimp\\RICOH Aficio 2045e PCL 6 (SRH)"
    Attributes : 8728
    Availability :
    AvailableJobSheets :
    AveragePagesPerMinute : 0
    Capabilities : {4, 2, 3, 5}
    CapabilityDescriptions : {Copies, Color, Duplex, Collate}
    Caption : \\casrvimp\RICOH Aficio 2045e PCL 6 (SRH)
    .
    .
    .
    SystemName : \\casrvimp
    TimeOfLastReset :
    UntilTime :
    VerticalResolution : 600
    WorkOffline : False




    Dernière modification le 16/08/2007 @ 17:40 par blanalex

Commentaire par Alexandre  Score: 2
Écrit le: 16/08/2007 @ 18:31

Si ma mémoire est bonne, c'était supposé faire partie intégrante de Vista...

Commentaire par Drizzt  Score: 2
Écrit le: 16/08/2007 @ 18:34

Effectivement l'une des multiples technologies qui ont été séparées de Vista pour qu'ils puissent atteindre leur date de livraison. Mais bon, c'est offert gratuitement pour XP et Vista...

Commentaire par blanalex  Score: 2
Écrit le: 16/08/2007 @ 21:05

Hormis la question de la distribution qui était prévue pour PowerShell (Monad), que pensez-vous du langage et de son potentiel ?


Tous les blogs
<< Si on se fesait un Canada! | Retour aux blogs | Bye bye AppleWorks! >>
Blogs de la même catégorie
<< Un beau petit problème de script! | Mon script de backup de MySQL >>