Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Powershell / Exchange : Erreur 9323 – Certificat expiré sur un objet AD

Introduction

Cet article permet de montrer la gestion des certificats via Powershell au travers d’un problème concret rencontré sur une infrastructure Exchange. Une solution basée sur un script Powershell sera détaillée.

Erreur rencontrée

Contexte : Infrastructure Exchange 2010 avec plusieurs dizaine de milliers de contacts Active Directory importés et mis à jour par un outil tierce.

Dans l’observateur d’événements de nombreux événements 9323 apparaissent.

9323

Ces derniers sont liés à la génération de l’OAB. Exchange détecte un utilisateur dont un certificat est expiré. Ces événements n’apparaissent que sur des objets de type "Contact"  La solution doit contrôler tous les objets Active Directory de ce type.

Solution

La soluton proposée pour purger les certificats invalides des contacts Active Directory se base sur un script Powershell V2. Ce dernier analyse l’attribut UserCertificate (il s’agit d’une liste de certificat).

Avec le type d’objet "System.Security.Cryptography.X509Certificates.X509Certificate2", il est possible d’obtenir des informations sur les certficats contenus dans cet attribut sous forme lisible (et non pas un tableau de bytes ou de valeur hexadécimal comme sur la console Active Directory Users and Computers).

Ci-dessous, un exemple de données récupérées sur les certificats d’un objet Active Directory (ici, il n’y a qu’un seul certificat et la variable $User est un utilisateur Active Directory).

Certificate

On remarque qu’on accède à des renseignements comme l’émetteur ou le sujet. Les informations qui nous interessent (dates de validité du certificat) sont aussi présentes. Il suffit donc de comparer la date d’expiration contenue dans l’attribut "notAfter" avec la date du jour en cours pour détecter les certificats expirés.

Grâce à la cmdlet "Set-ADObject", il sera ensuite possible de supprimer les certificats qui ne sont plus valides.

Script

En amont de ce script, un transcript est lancé afin de loguer toute les opération effectuées. Une vérification de la présence du module ActiveDirectory ainsi que son chargement sont ensuite réalisées.

Le script appelle une fonction créée pour traiter tout objet AD (ou tableau d’objets AD) qui lui est passé. Pour ma part, je transmets en paramètre tous les contacts présents dans Active Directory. Cependant cette fonction peut très bien être utilisée avec des utilisateurs. Voici l’algolrithme mis en place dans la fonction Test-CertExpiration :

  1. Filtrage des objets pour ne conserver que ceux ayant au moins un certificat présent dans l’attribut userCertificate.
  2. Boucle ForEach sur tous les utilisateurs :
    1. Boucle For sur tous les certificats de l’utilisateur (pas de ForEach afin d’être certain de la position du certificat dans l’attribut userCertificate)
    2. Analyse de la date d’expiration
    3. Si le paramètre DeleteExpired est présent alors on supprime le certificat dans Active     Directory s’il n’est plus valide.
    4. Si le paramètre DeleteExpired n’est pas présent alors deux attributs sont ajoutés à l’objet     AD :
      1. CertExpired : contient les index des certificats expirés dans le tableau de l’attribut userCertificate
      2. CertValid : contient les index des certificats valides dans le tableau de l’attribut userCertificate
  3. Si le paramètre Export et ExportPath ont été renseigné alors le tableau d’objet AD est exporté sous format CSV avec la liste des index des certificats valides et expirés.

Ci-dessous, vous trouverez le script intégralement commenté. A noter, que le compte exécutant ce script doit posséder les droit suffisants à la modifications des objets AD concernés (via une délégation par exemple).

Ici, la fonction Test-CertExpiration, est utilisée en mode suppression, cependant il est aussi possible de se servir du mode Export pour n’effectuer qu’un simple audit (logué dans un fichier) des objets concernés via la commande suivante :

$ADObjets est un tableau d’objets Active Directory.

Il est enfin possible de ne donner qu’un tableau d’objets AD à traiter sans spécifier le mode export ou suppression :

Dans ce cas, un tableau d’objets AD est retourné. Pour chaque objet, les attributs CertExpired et CertValid sont ajoutés.

Quelques points clés du fonctionnement de la fonction Test-CertExpiration :

Les paramètres Export et DeleteExpired sont de type switch et ne peuvent apparaître ensemble. Le paramètre ExportPath est dynamique et n’est disponible que si le paramètre Export a été choisi.

Pour information, il n’est pas nécessaire de paralléliser le processus de contrôle du certificat. Après un test effectué sur plus de 90000 contacts Active Directory, il s’avère que ce dernier a duré moins de 5 minutes. Utiliser du multi thread (workflow ou job Powershell) alourdirai le script et ralentirai le processus au lieu de l’accélérer.

Powershell : Connexion à Exchange Online

Introduction

Powershell est intégré dans tous les nouveaux produits et services de Microsoft. Grâce à ce langage de scripting il est tout naturellement possible d’administrer Exchange Online via le Remote Powershell. Au delà d’offrir des possibilités d’automatisation, certaines opérations ne sont réalisables que par ce biais.

La gestion d’Exchange Online se décompose en 2 parties :
L’installation d’un module Powershell pour la gestion des utilisateurs dans l’Active Directory Azure
La connexion à Exchange Online pour l’administration des paramètres de la messagerie et des boîtes aux lettres.

Cet article s’adresse donc aux personnes souhaitant administrer Exchange Online mais aussi à ceux qui utilisent Active Directory dans le cloud Azure.

Nous allons voir comment accéder à la gestion des utilisateurs sur Office 365, à leurs boîte email Exchange Online. Je montrerai aussi quelques erreurs courantes (problème d’installation et connexion derrière un proxy) que l’on peut rencontrer lors d’une interaction avec Office 365 ainsi que leurs résolutions.

A noter que, comme les sessions distantes Powershell sont apparues avec la version 2, il est nécessaire de posséder à minima cette version pour exécuter les opérations que nous allons voir.

Gestion des utilisateurs Microsoft Online (Azure Active Directory)

Installation :

L’administration des utilisateurs ne peut se faire que via l’installation d’un module Powershell. Ce dernier nécessite un prérequis : Microsoft Online Services Sign-In Assistant. Ci dessous, vous trouverez les liens de téléchargement de ce dernier :

Microsoft Online Services Sign-In Assistant– 32 bit version
http://go.microsoft.com/fwlink/?linkid=236299
Microsoft Online Services Sign-In Assistant – 64 bit version
http://go.microsoft.com/fwlink/?linkid=236300

Voici maintenant les liens pour récupérer le module Powershell :

Microsoft Online Services Module for Windows PowerShell (32-bit version)
http://go.microsoft.com/fwlink/?linkid=236298
Microsoft Online Services Module for Windows PowerShell (64-bit version)
http://go.microsoft.com/fwlink/?linkid=236297

Vérification de l’installation :

Pour vérifier que le module est opérationnel, il suffit de l’importer et de se connecter aux services MSOnline (en s’authentifiant lorsque c’est demandé) :

On peut ensuite utiliser les commandes comme :

Erreurs rencontrées :

1/ Lors de l’installation de Microsoft Online Services Sign-In Assistant, j’ai rencontré l’erreur suivante :

In order to install Windows Azure Active Directory Module for Windows PowerShell, you must have Microsoft Online Services Sign-In Assistant version 7.0 or greater installed on this computer.

Pour résoudre ce problème, il m’a fallu installer la beta de ce prérequis disponible dans le lien ci-dessous :
http://www.microsoft.com/en-us/download/details.aspx?id=39267

2/ Si un proxy est utilisé lors de la connexion au cloud de Microsoft, alors on obtient l’erreur suivante :

Erreur Proxy

Pour résoudre ce problème, il faut configurer le proxy ainsi que les paramètres d’authentification à utiliser :

Par défaut Powershell utilise le proxy d’Internet Explorer ; on peut reconfigurer le paramétrage du proxy avec la commande « netsh ».

On spécifie une URL de proxy (première ligne) ou on indique que l’on souhaite utiliser les paramètres présents dans Internet Explorer (seconde ligne) :

Aussi, on peut aussi supprimer toute configuration du proxy via la commande suivante :

Pour que Powershell puisse s’authentifier, il faut indiquer un couple login / mot de passe. En général, on utilisera ceux de la session actuellement ouverte. Pour effectuer cette opération, il suffit d’exécuter la commande suivante :

Connexion à Exchange Online

Implémentation :

Le but de l’opération est d’importer toutes les commandes que l’on connait sous Exchange comme « Get-Mailbox » qui existent aussi sous Exchange Online.
Voici les quelques lignes Powershell permettant d’ouvrir une PSSession vers Exchange Online en spécifiant un compte utilisateur pour s’authentifier puis d’importer les cmdlets Exchange. A noter que la liste des commandes disponibles variera en fonction des droits du compte utilisé (grâce à RBAC).

Erreur rencontrée :

Comme pour la gestion des utilisateurs Active Directory dans le cloud, une configuration particulière est attendue lorsque l’on essaie de se connecter en passant par un proxy. L’erreur générique suivante apparaît :

Erreur Proxy Exchange

Pour résoudre ce problème, il est possible d’utiliser la même méthode que précédemment. Cependant, on peut aussi définir les paramètres des sessions Powershell distantes et ainsi configurer un proxy. Dans l’exemple ci-dessous nous utiliserons le proxy défini dans Internet Explorer :

La variable $Credential contient les paramètres d’authentification.

Windows Server 2012 R2 – Mise à niveau d’une version d’évaluation

Contexte

Dans le cadre de projets, il peut arriver que les licences définitives ne soient pas livrées au moment du déploiement des serveurs. Pour ne pas perdre de temps, il est possible d’installer la version d’évaluation de Windows Server 2012 R2 (http://technet.microsoft.com/fr-fr/evalcenter/dn205286.aspx) qui est valable 180 jours et de la mettre à niveau vers une version commerciale une fois la licence acquise.

2014-02-20_182544

Solution

La commande-let DISM permet de mettre à niveau notre version d’évaluation vers une version commerciale (avec licence).

Pour se faire, lancez l’invite de commande en tant qu’administrateur et tapez la commande suivante :

DISM /Online /Set-Edition:<type de version> /ProductKey:<licence> /AcceptEula

2014-02-20_182724

Une fois la commande terminée, il faut redémarrer le serveur.

Remarque : Afin de savoir vers quelle type de version il est possible de mettre à niveau le serveur utilisez la commande DISM /Online /Get-TargetEditions

2014-02-21_095912

Après le redémarrage le serveur n’est plus un serveur d’évaluation et il peut être activé normalement.

2014-02-20_1836482014-02-20_1837312014-02-20_1837382014-02-20_183830

Remarques

1 – Cette commande fonctionne également avec une des nouveautés de Windows Server 2012 R2 : l’AVMA (Automatic Virtual Machine Activation).

2014-02-20_185644

2 – Attention cette mise à niveau ne fonctionne pas si le serveur est un contrôleur de domaine. Pensez donc bien à faire la manipulation avant l’installation du rôle Active Directory Domain Services !