Administrer Windows Server Core avec un Windows Server en interface graphique (GUI).

Préparation

Dans un premier temps, changeons le clavier en azerty et renommons les machines :

Set-WinUserLanguageList -LanguageList fr-FR

Rename-Computer -NewName « nom »

(cf Mémo PowerShell)

(Windows Core)

Windows Core

(Windows GUI)

Windows GUI

Fixons les adresses IP :

Windows Core :

Adresse IP : 192.168.33.201 /24

Passerelle : 192.168.33.2

Windows GUI :

Adresse IP : 192.168.33.200 /24

Passerelle : 192.168.33.2

New-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr –DefaultGateway adresse_ip_passerelle

Set-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr

Configuration Carte réseau

Fixons un DNS :

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 192.168.33.200

Redémarrer les deux machines :

shutdown -r -t 0

OU

Restart-Computer

Installation Active Directory :

Install AD

Confirmer l'installation

Promouvoir le serveur :

Pomote this server

Créer une nouvelle forêt :

new forest

Enter password

Suivre l’assistant et cliquer à la fin sur Install.

Votre serveur Active Directory va redémarrer. Un fois celui-ci démarré, intégrer votre Windows Core au domaine :

Add-Computer -DomainName mewpipe.com -Credential Administrator@mewpipe.com

Intégrer domaine

Redémarrer votre serveur :

shutdown -r -t 0

OU

Restart-Computer

Confirmation & redémarrage

Votre Windows Core est maintenant intégré dans le domaine mewpipe.com

Administration du Serveur Core :

Sur votre Windows GUI ajouter votre Windows Core.

add server

Rechercher votre serveur Core

select server

Vous pouvez maintenant Administrer votre Windows Core à partir de votre Windows GUI.

Exemple : installer IIS :

add roles

Sélectionner votre serveur Core :

select core server

Sélectionner le(s) rôle(s) à installer.

select role

deployer role

Attendre la fin de l’installation

wait

Vérifions que IIS est bien installé sur le Windows Core :

IIS OK

cf : Administrer IIS d’un Windows Server Core à partir d’un Windows en GUI

Mémo commandes PowerShell

Définir le clavier en AZERTY

Set-WinUserLanguageList -LanguageList fr-FR

Changer le nom de votre machine

Rename-Computer -NewName « nom »

Configurer une carte réseau
Lister les interfaces réseaux

Get-NetIPInterface

Affecter une adresse et un masque à une interface

Adresse : 172.16.0.50

Masque de sous-réseau : 255.255.255.0 (/24)

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24

Passerelle : 172.16.0.1

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24 –DefaultGateway 172.16.0.1

Ajouter une adresse DNS

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 172.16.0.1

Intégrer une machine dans un domaine Active Directory

Add-Computer -DomainName pjt.local -Credential Administrator@pjt.local

Redémarrer la machine

Restart-Computer

Administrer à distance IIS
Installer le WMSvc IIS

Import-Module ServerManager

Add-WindowsFeature Web-Mgmt-Service

Activez le WMSvc IIS

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1

Démarrer automatiquement WMSvc

Set-Service -name WMSVC -StartupType Automatic

Start-service WMSVC

Sur un autre serveur, vous pouvez lancer une console IIS et ajouter le nouveau serveur.

Désactiver le firewall de Windows

Set-NetFirewallProfile -Profile * -Enabled False

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();
                    }
                }

            }
            
        }