Création d’utilisateurs sur AD via un formulaire web (ASP.NET / C# / PowerShell)

Introduction :

Dans un projet, on m’a demandé de créer une interface de création d’utilisateurs pour les RH. Via une interface, les RH vont pouvoir créer simplement des comptes sur le serveur Active Directory (AD) pour les nouveaux collaborateurs.

J’ai créé dans un premier temps un script PowerShell avec les assembly windows.form pour l’interface graphique. Mais cette solution n’est pas forcément la plus pratique pour les utilisateurs.

J’ai réalisé des recherches et je suis tombé sur plusieurs articles couplant les technologies C#, asp.NET et PowerShell.

Je vous joins les fichiers de la solution : PowerShellExecution.zip (supprimer l’extension ppt 🙂 )

Ci-dessous un visuel de l’interface :

supexchange

Configuration du serveur Web (IIS)

Il faut :

  • IIS avec ASP
  • Ajouter une assembly dans IIS
  • Donner des droits permettant au pool IIS de créer des Utilisateurs sur l’AD

Installation de IIS avec ASP :

supexchange_6

Configuration des assembly:

1-Ouvrir IIS, sélectionner votre site et entrer dans .NET Compilation

supexchange_1

2-Entrer dans assemblies

supexchange_2

3- Ajouter la ligne : System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

supexchange_3

Droit permettant l’exécution du code PowerShell :

1- Sélectionner le pool d’application qui exécute votre site

supexchange_4

2- Faire un clique droit, Advanced Settings. Dans Identity entrer l’identifiant d’un compte utilisateur possédant suffisamment de droits pour exécuter les commandes PowerShell.

supexchange_5

Code :

Vous allez avoir besoin de System.Management.Automation.

1-Créer un nouveau projet via Visual Studio (Empty Web Application)

Vous allez avoir 2 fichiers :

  • Default.aspx : C’est votre formulaire
  • Default.asp.cs : Le « traitement de votre formulaire »

supexchange_8

2 – Dans Visual Studio Cliquer sur Outils > Gestionnaire de package NuGet > Console du Gestionnaire de package

supexchange_7

2- Dans Package Manager Console exécuter cette commande : Install-Package System.Management.Automation

Commandes :

Dans Default.asp.cs n’oubliez d’implémenter System.Management.Automation

using System.Management.Automation;

#Création d’une variable de type PowerShell

var shell = PowerShell.Create();

#variable commandes avec la chaine de caractère de création de l’utilisateur

string commandes = "New-ADUser -Name \"" + name + " " + lastName + "\" –GivenName \""+ name +"\" –Surname \""+  lastName +"\" –DisplayName \"" + name + " " + lastName +"\" -City \"" + city + "\" –SamAccountName \""+ name +"." +lastName + "\".ToLower() -AccountPassword (convertto-securestring 'Supinfo2014' -asplaintext -force ) -Path \"OU=" + service +",OU=Supinfo,DC=supexchange,DC=fr\" -UserPrincipalName \""+ name + "." +  lastName +"@supexchange.fr\".ToLower()"

#Ajouter une commande => le contenu de la variable commandes

shell.Commands.AddScript(commandes);
#Ajouter une commande
 shell.Commands.AddScript("Enable-ADAccount -Identity \"" + name + "." + lastName + "\".ToLower()");

#Exécuter les commandes

shell.Invoke();

#Il est possible de récupérer les éléments de l’exécution des commandes PowerShell. Exemple avec ma méthode OU

static void OU(string OU)
        {

            var shell = PowerShell.Create();
            
            // Test si l'OU passé en paramètre existe
            shell.Commands.AddScript("[adsi]::Exists(\"LDAP://OU=" + OU +",OU=Supinfo,DC=supexchange,DC=fr\")");
            
            // Exécution de la commande PowerShell
            var results = shell.Invoke();

            if (results.Count > 0)
            {
                var builder = new StringBuilder();

                foreach (var psObject in results)
                {
                    // Si l'OU n'existe pas, On l'a créé
                    if(psObject.BaseObject.ToString() != "True")
                    {
                        shell.Commands.AddScript("New-ADOrganizationalUnit -Name " + OU + " -Path \"ou=Supinfo,dc=supexchange,dc=fr\"");
                        shell.Invoke();
                    }
                }

            }
            
        }
Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s