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
- Sélectionner les Services de Rôles IIS : ASP.NET

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.

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.

Cliquer sur
de la la propriété “Assemblies”
Ajouter la ligne :
System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

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 :

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.