locked
Comment exécuter une commande Powershell dans une page .Net RRS feed

  • Discussion générale

  • Article gagnant dans le concours "Appel à la contribution" - Yann BIEZ

    Bonjour à tous,

    Cet article vous présente comment exécuter une commande Powershell dans une page ASP .NET. Cela permet de crée simplement et rapidement des rapports dynamiques.

    Nous allons crée une page IIS qui récupéra l’état des services.

    Allez c’est parti….

    Avant tout, il nous faut un serveur IIS et Powershell.

    Installation de IIS 7.5 :

    - Ajouter le Rôle IIS

    image      

    - Sélectionner les Services de Rôles IIS : ASP.NET

    image

    Lancer l’installation.

    Configuration de IIS :

    Voici une l’étape clef, afin que notre page ASP puisse lancer des commandes powershell, il nous faut charger la librairie suivante:

    System.Management.Automation

    Nous allons donc indiquer à IIS de charger cette librairie.

    image

    Lancer la console IIS 7 et naviguer vers le site qui hébergera notre future page. Dans notre exemple c’est le site par défaut d’IIS.

    Ouvrir la propriété .NET Compilation.

    image

    Cliquer sur image de la la propriété “Assemblies”

    Ajouter la ligne :

    System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

    image

    Valider les changements dans IIS.

    Nous voila prêt à crée des pages web en ASP .NET qui afficherons le résultat de commande Powershell.

    Création de notre page web Get-Service :

    Voici le code de notre page web:

    <%@ Page Language="VB" Debug="true" %>
    < %@ import Namespace= "System.Management" %>
    < %@ import Namespace= "System.Management.Automation" %>
    < %@ import Namespace= "System.Management.Automation.Host" %>
    < %@ import Namespace= "System.Management.Automation.Runspaces" %>
    < %@ import Namespace= "System.Collections.Generic" %>
    < %@ import Namespace= "System.Collections.ObjectModel" %>
    < html>
    < body>
    < %
    '====================================================
    ' Configuration du l'espace de lancement PowerShell
    '====================================================
    Dim rsConfig as RunspaceConfiguration
    rsConfig = RunspaceConfiguration.Create()
    Dim myRunSpace as Runspace
    myRunSpace = RunspaceFactory.CreateRunspace(rsConfig)
    '====================================================
    ' Exemple d'Ajout du module Active Directory
    '====================================================
    Dim iss As InitialSessionState = InitialSessionState.CreateDefault()
    iss.ImportPSModule(New String() {"ActiveDirectory"})    
    myRunSpace = RunspaceFactory.CreateRunspace(iss)
    myRunSpace.Open()
    '=================================================
    ' Liste des commandes Powershell
    '=================================================
    Dim pipeLine as Pipeline
    myRunSpace.CreatePipeline("[System.Security.Principal.WindowsIdentity]::GetCurrent().Name")
    pipeLine = myRunSpace.CreatePipeline("Get-service")
    '=================================================
    ' Lancement de la commande powershell
    '=================================================
    Dim commandResults
    commandResults = pipeLine.Invoke()
    '=================================================
    ' Affichage des resultats
    '=================================================
    Response.write(System.Security.Principal.WindowsIdentity.GetCurrent().Name & "<br/>")
    '=================================================
    ' Affichage de l'entete du tableau des services
    '=================================================
    response.write("<TABLE BORDER='1'>")
    response.write("  <TR>")
    response.write("  <TR>")
    response.write("<TH> Nom du service </TH>")
    response.write("<TH> Status du service </TH>")
    response.write(" </TR>") '

    ====================================================================
    ' Affichage des résultats de la commande Get-Service dans le tableau.
    '====================================================================
    For Each cmdlet As PSObject In commandResults
    Dim cmdletName As String
    Dim cmdletStaus As String
    cmdletName = cmdlet.Properties("DisplayName").Value.ToString()
    cmdletStaus = cmdlet.Properties("Status").Value.ToString()
    response.write("<TR><TD>"& cmdletName &"</TD><TD>"& cmdletStaus & "</TD></TR>")
    Next
    '====================================================================
    ' Affichage de la fin du tableau.
    '====================================================================
    response.write("</TABLE>")
    response.write("Errors: " & pipeLine.Error.Count & "<br/>")
    response.write("Results: " & commandResults.count & "<br/>")
    '====================================================================
    ' Fermeture de POWERSHELL
    '====================================================================
    myRunspace.Close()
    %> </body>
    < /html >

    Enregistrer le fichier sous le nom souhaité avec l’extension “.aspx “.

    Dans mon exemple, le fichier ce nomme test-powershell.aspx

    Voici le résultat de la page :

    image

    J’espère que cette article vous auras aidé à créer vos propre page dynamique de commande POWERSHELL via .NET.

     


    Cordialement, Yann www.adminsysteme.fr


    Florin CIUCA, MSFT  Votez! Appel à la contribution
    Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.


    mardi 22 mai 2012 09:14