Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)

[PowerShell] Exécuter du PowerShell au travers d’un site ASP.NET

PowerShell logo

Je vais aujourd’hui vous expliquer comment exécuter un script PowerShell au travers d’un site web, en ASP.NET, avec des paramètres. Dans l’exemple que je vais vous présenter, l’utilisateur aura la possibilité de démarrer une VM qui se trouve sur Azure.

L’interface finale ressemblera à ceci:

image29

Un des prérequis est d’avoir le fichier publishsettings de Azure pour votre suscription. Ouvrez une fenêtre PowerShell et importez le module Azure. Exécutez les commandes suivantes:

Add-AzureAccount
Select-AzureSubscription –SubscriptionId d9703db7-XXXXXX-XXXX-X-XXXX-XXXX
Get-AzurePublishSettingsFile

SNAGHTML47712f

Une page web va s’ouvrir et va télécharger le fichier. Nous allons maintenant créer notre code ASP.NET, avec Visual Studio 2015. Créez un nouveau projet dans Visual Studio et choisissez ASP.NET Web Application:

image30

Choisissez le Template Empty:

image31

Dans la solution, créez un dossier où le script PowerShell sera stocké. Ajoutez à ce dossier le fichier publishsettings que vous avez téléchargé précédemment. Créez un nouveau script PowerShell et ajoutez y le code suivant:

Param(
[String]
$VMName
)
Import-Module Azure
Import-AzurePublishSettingsFile “C:\inetpub\Start-AzureVM\Sources\BizSpark-10-22-2015-credentials.publishsettings”
$azureVM = Get-AzureVM | Where-Object {$_.Name -eq $VMName}
Start-AzureVM -Name $azureVM.Name -ServiceName $azureVM.ServiceName

image32

Ajoutez ces 2 fichiers à Visual Studio:

image33

Créez maintenant une vue Web Form:

image34

Collez le code suivant pour ajouter:

  • Une text box
  • Un boutton
  • Un label

<%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”default.aspx.cs” Inherits=”Start_AzureVM._default” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>Start an Azure VM</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<table>
<tr><td><h1>Start an Azure VM</h1></td></tr>
<tr><td><h3>Provide the name of the VM that you want to start</h3></td></tr>

<tr>
<td>
<asp:TextBox ID=”ServerName” runat=”server” TextMode=”SingleLine”></asp:TextBox>
<asp:Button ID=”ExecuteCode” runat=”server” Text=”Start VM” Width=”200″ OnClick=”ExecuteCode_Click” />
</td>
</tr>

<tr>
<td>
<asp:Label ID=”ConfirmationMessage” runat=”server”></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

Ouvrez maintenant le fichier .cs et collez le code suivant pour:

  • Exécuter le script PowerShell avec le nom de la VM en paramètre
  • Ecrire un message de confirmation

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Start_AzureVM
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void ExecuteCode_Click(object sender, EventArgs e)
{
var SCRIPT_PATH = @”C:\inetpub\Start-AzureVM\PSScript\Start-AzureVM.ps1″;
Process _Proc = new Process();
_Proc.StartInfo.FileName = “Powershell.exe”;
_Proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_Proc.StartInfo.Arguments = @”” + SCRIPT_PATH + ” ‘” + ServerName.Text + “‘ “;
_Proc.Start();

ConfirmationMessage.Text = “The VM ” + ServerName.Text + ” is starting. Wait few minutes before trying to connect to it.”;
ServerName.Text = string.Empty;
}
}
}

Ouvrez le fichier Web.config et changez le paramètre langversion de 6 à 5:

image35

Nous pouvons publier notre site web. Je vais déployer une nouvelle VM sur Azure pour fournir l’interface à nos utilisateurs. Cette VM contiendra:

  • IIS
  • Azure PowerShell module
  • Web Deploy 3.5
  • .Net Framework

Je vais ajouter 2 endpoints de plus sur ma VM pour le HTTP et le Web Deploy:

image36

Quand la création est terminée, vous pouvez déployer le module Azure PowerShell et le Web Deploy 3.5 avec le Web Platform Installer:

image37

N’oubliez pas d’installer le Framework qui correspond à votre projet, dans mon cas 4.5.2.
Pour IIS, installez le Web Server avec la feature ASP.NET 4.5:

image38

Vérifiez bien que le port 8172 est ouvert dans le firewall local de la machine:

image39

Ouvrez la console IIS Manager sur le serveur IIS et allez dans IIS Manager Users. Ajoutez un compte Windows qui a les droits de se connecter au serveur via le web deploy:

image40

Dans les paramètres du Web Deploy, cochez la case pour autoriser les connexions à distances, appliquez et démarrez le service:

image41

Créez maintenant un nouveau site (Start-AzureVM par exemple). Choisissez ensuite un pool d’application qui a les droits d’exécuter les scripts PowerShell:

image42image59

Sur le nouveau site, sélectionnez IIS Manager Permissions et autorisez un nouvel utilisateur:

image43

Retournez dans visual studio et cliquez sur Build > Publish Start-AzureVM:

image44

Choisissez où vous souhaitez publier votre site web:

image45

Choisissez la VM sur lequel le site web va être poussé:

image46

Fournissez les informations suivantes:

  • Le nom du serveur Azure et son port public
  • Le site sur lequel le website va être déployé
  • Un compte utilisateur qui a les droits d’utiliser le Web Deploy
  • L’URL pour accéder au site une fois que le wizard sera fermé (optionnel)

image47

Acceptez le certificat:

image48

Si vous avez l’erreur suivante:

Could not connect to the remote computer (“iis01flo.cloudapp.net”).
On the remote computer, make sure that Web Deploy is installed and that the required process (“The Web Management Service”) is started.

The remote server returned an error: (404) Not Found.

image49

Allez dans le panneau de configuration et modifiez le logiciel Microsoft Web Deploy 3.5 et ajoutez toutes les features:

image50

Si tout est OK, vous devriez avec ceci:

image51

Choisissez ensuite les option que vous souhaitez:

image52

Quand vous cliquez sur le boutton Preview vous allez voir ce que VS va envoyer sur le serveur IIS:

image53

L’envoi est maintenant terminé:

image54

Internet Explorer s’ouvre sur le site que vous venez de déployer:

image55

Renseignez le nom d’une VM que vous souhaitez démarrer:

image56

Après quelques secondes, vous pouvez voir que la VM est en cours de démarrage:

image57

Vous pouvez également vérifier la commande qui a été exécuté dans les logs du serveur IIS:

image58

Facebook Like
Anonymous