Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Active Directory : Importation d’utilisateurs en masse avec Powershell

Bonjour,

Je vous présente un petit script powershell que j’utilise pour réaliser des maquettes ou en production selon le besoin.

Le but de ce script est de pouvoir créer et renseigner des comptes utilisateurs a partir d’un fichier CSV contenant les informations relatives aux comptes.

Ce dernier permet dans un active directory :

  • De tester la présence des Unités d’Organisations et les créer si elles n’existent pas.
  • De tester si les utilisateurs existent (le test est basé sur le SamAccountName).
  • De créer les comptes utilisateurs avec les informations renseignées.
  • De définir un de mot passe.
  • D’activer les comptes.
  • De placer les utilisateurs dans les bonnes Unités d’Organisations.

Présentation du CSV

Dans ce cas de figure je remplis un certain nombre de champs, mais en fonction de ce que l’on souhaite renseigner dans le compte utilisateur il suffit d’incrémenter le fichier CSV et bien sur d’ajouter les paramètres associés dans la ligne de code permettant la création de l’utilisateur.  

Le fichier csv a été réalisé avec l’application excel et contient les informations suivantes :

  • GivenName : Le Prénom
  • Surname : Le Nom
  • Name : Prénom Nom
  • SammAccountName : L’identifiant
  • DisplayName : Le nom d’affichage
  • Description : Une description du compte
  • Company : Le nom de la société
  • Department : Le nom du Service
  • EmailAddress : L’adresse mail
  • OfficePhone : Le numéro de téléphone
  • Title : L’intitulé du poste
  • OrganizationalUnit : L’unité d’organisation dans laquelle sera placé le compte

 

Une fois le fichier créé, enregistrez le au format « CSV », notez le chemin d’accès au fichier dans un coin il vous servira ultérieurement.

Présentation du Script

  

 Ci dessous le script Powershell, j’attire votre attention sur le fait qu’il fonctionne pour des Unités d’Organisation de premier niveau si vous possédez ou souhaitez utiliser des sous OU il faudra faire des modifications dans le script (voir la partie Bonus plus bas).

# Script de création d'Utilisateur

#Déclaration des variables
$Domain = "Lab"  # Déclarez ici votre Domaine
$Ext = "info"  # Déclarez ici l'extension (com, info, lan, local....)
$Server ="DC01.lab.info"  # Déclarez ici le serveur d'exécution
$FQDN ="@lab.info"  # Déclarez ici le nom du Domaine précédé de "@" cela servira pour la création du UserPrincipalName
$LogFolder = "C:\LogMathieu" # Déclarez ici l'emplacement du répertoire de Log
$Folder = "LogMathieu" # Déclarez ici le nom du répertoire de Log
$LogFile = "C:\LogMathieu\LogScript.txt" # Déclarez ici l'emplacement du fichiers de Log du script
$File = "LogScript.txt" # Déclarez ici le nom du fichier de Log du script
$LogError = "C:\LogMathieu\LogError.txt" # Déclarez ici l'emplacement du fichier d'erreur global 
$LogCatch = "C:\LogMathieu\LogCatch.txt" # Déclarez ici l'emplacement du fichier de gestion de l'erreur
$FileCatch = "LogCatch.txt" # Déclarez ici le nom du fichier de gestion de l'erreur
$CSV = "C:\Users\Mathieu\Desktop\Import\Utilisateurs_Maquette.csv" # Déclarez ici le chemin d'accès à votre fichier csv


# Avant de commencer nous allons créer un répertoire et un fichier pour les logs


if (!(Test-Path $logfolder)) {

    New-Item -Name $Folder -Path C:\ -type directory
    New-Item -Name $File -Path $LogFolder -type file
    New-Item -Name $FileCatch -Path $LogFolder -type file
    Write-Output "Le dossier $Folder n'existait pas, création du Dossier $Folder, du fichier $File et $FileCatch" | Add-Content $LogFile
                                }
Else {
    Write-Output "Le dossier $Folder existe déjà!" | Add-Content $LogFile
        }

# Import du module Active Directory et import du fichier csv

Import-Module ActiveDirectory

Import-Csv -Delimiter ";" -Path $CSV | ForEach-Object {
    $OU =$_."OrganizationalUnit"

    # Test de la présence de l'unité d'organisation et création si elle n'existe pas

    if ((Get-ADOrganizationalUnit -Filter {Name -eq $OU}) -eq $null) {
        Write-Output "l'unité d'organisation $OU n'existe pas, création de la nouvelle Unité d'organisation" | Add-Content $LogFile
        Try {
            New-ADOrganizationalUnit -Name $OU -Path "DC=$Domain,DC=$Ext" -ErrorAction Stop -ErrorVariable eOU
                }
        Catch{
            "Une erreur $eOU a eu lieu à $((Get-Date).DateTime)"  | Add-Content $LogCatch
                }
        Finally{
            "Fin de l'opération Ajout d'une OU"
                }
                                                                        }
    Else {
        Write-Output "l'unité d'organisation $OU existe déjà" | Add-Content $LogFile
            }
    $User =$_."SamAccountName"
    $DisplayName =$_."DisplayName"
    $GivenName =$_."GivenName"
    $Name =$_."Name"
    $SamAccountName =$_."SamAccountName"
    $Surname =$_."Surname"
    $Description =$_."Description"
    $Company = $_."Company"
    $Department = $_."Department"
    $EmailAddress =$_."EmailAdress"
    $OfficePhone  =$_."OfficePhone"
    $Title =$_."Title"

    # Test de la présence de l'utilisateur et création si il n'existe pas

    if ((Get-ADUser -Filter {SamAccountName -eq $User}) -eq $null) {
        Write-Output "l'utilisateur $User n'existe pas, création du nouvel utilisateur" | Add-Content $LogFile
        Try {
            New-ADUser -Company:$Company -Department:$Department -DisplayName:$DisplayName -GivenName:$GivenName -Name:$Name -Description:$Description -EmailAddress:$EmailAddress -OfficePhone:$OfficePhone -Title:$Title -Path:"OU=$OU,DC=$Domain,DC=$Ext" -SamAccountName:$SamAccountName -Server:"$Server" -Surname:$Surname -Type:"user" -UserPrincipalName:"$SamAccountName$FQDN"  -AccountPassword:(ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled:$true -AccountNotDelegated:$false -AllowReversiblePasswordEncryption:$false -CannotChangePassword:$false -PasswordNeverExpires:$false -ChangePasswordAtLogon:$true -ErrorAction Stop -ErrorVariable eUser
                }
    Catch{
        "L'erreur $eUser s'est produite à $((Get-Date).DateTime)" | Add-Content $LogCatch
            }
    Finally{
        "Fin de l'opération Ajout d'un Utilisateur"
            }
                                                                        }
    Else {
        Write-Output "l'utilisateur existe déjà" | Add-Content $LogFile
            }
                                                                                                                    }

# Récupérations des erreurs

$Error > $LogError

 

Bonus :

 Si vous souhaitez utiliser des « sous OU » il vous faudra modifier des éléments dans le fichier csv et le script.

Dans le fichier csv: 

Créez de nouvelles colonnes « OrganizationalUnit » et incrémentez les avec un numéro soit par exemple : OrganizationalUnit1,OrganizationalUnit2,OrganizationalUnit3.

Ensuite placez y les noms des untiés d’organistation de la plus basse à la plus haute, par exemple : 

  1.  LAB.INFO\IT\Réseau\Prestataires\PI Services
  2. LAB.INFO\IT\Systèmes\Windows\Stagiaire

Dans le fichier Script:

Il ne vous restera plus qu’à faire les modifications suivantes :

  1. Déclarez les nouvelles variables « OrganizationalUnit1,OrganizationalUnit2,OrganizationalUnit3″ (Ligne 38 dans le script avant modification).
  2. Modifier le « path » en ajoutant « OU=$OU1,OU=$OU2,OU=$OU3 » devant « DC=$Domain,DC=$Ext » (ligne 44 dans le script avant modification).
  3. Modifier le « path » en ajoutant « OU=$OU,OU=$OU1,OU=$OU2,OU=$OU3″ devant « DC=$Domain,DC=$Ext » (ligne 74 dans le script avant modification) attention ici ce n’est pas tout à fait pareil que l’étape 3.

Ceci n’est qu’un exemple bien sur, il vous est tout à fait possible de créer directement une variable $Path et renseigner le chemin complet dans votre csv.

Le Service Pack 2 pour Windows 7 SP1 et Windows Server 2008 R2 SP1

Suite à l’interrogation d’un client à propos des différentes versions d’OS et de leurs Services Pack, force m’a été de constater que le « Convenience Rollup Update for Windows 7 SP1 and Windows Server 2008 R2 SP1 » paru en avril 2016, soit 5 ans après le SP1 (février 2011), n’était pas fourni directement par Microsoft via Windows update.

En effet, ce qui s’apparente à un service pack mais qui n’en est pas un, n’est mis à disposition que sur le « Microsoft Catalog Update« .

Ce « CRU » de 316 à 476Mo selon le package, contient un peu plus de 200 mises à jour soit toutes celles depuis le SP1 jusqu’au mois de mai 2016 (à l’heure ou j’écris ces lignes). 

 

Prérequis :

Pour pouvoir installer le Rollup package vous devrez disposer des éléments suivants:

  1. Service Pack 1 for Windows 7 or Windows Server 2008 R2 (KB976932)
  2. April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 (KB3020369)
  3. 4Go d’espace libre sur le disque
  4. Utiliser Internet Explorer pour le téléchargement (Vous aurez un message comme ci-dessous avec les autres navigateurs)

Sans Internet Explorer

 

Téléchargement :

Pour télécharger le package utilisez Internet Explorer puis rendez vous sur l’URL : Microsoft Catalog Update

Ici un Pop-up vous invitant à installer un module complémentaire apparaît, cliquez sur « installer« 

Module à installer

Ensuite à l’aide du menu contextuel recherchez la KB3125574 (vous n’êtes pas obligé d’écrire KB le numéro suffit).

KB3125574

3 packages s’offrent à vous : 

  1. Le premier pour Windows 7 SP1 32 bits
  2. Le deuxième pour Windows Serveur 2008 R2 SP1 64 bits
  3. Le troisième pour Windows 7 SP1 64bits

Sélectionnez celui ou ceux qui vous intéressent à l’aide du bouton « Ajouter« 

Packages

Puis cliquez sur « Afficher le panier« 

 Panier

Et enfin « Télécharger« . Download

Une fenêtre s’ouvre pour afin que vous puissiez indiquer le répertoire de destination de votre téléchargement, à la suite de quoi le téléchargement débutera automatiquement.

Directory

En cours

Fin

 

Une fois ce dernier terminé il ne vous reste plus qu’a vous rendre dans le répertoire que vous avez indiqué plus tôt; dedans se trouvera un ou plusieurs répertoires portant le nom du ou des packages récupérés.

CRU

 

Vous n’aurez plus qu’à ouvrir le « Package autonome Microsoft Update (.msu) » précédemment téléchargé et attendre sagement que les mises à jours s’installent.

Package autonome Microsoft Update (.msu)

Nota bene :

Microsoft n’a prévu aucun correctif pour le navigateur « Internet Explorer« , la firme américaine vous propose simplement de télécharger et installer la dernière version disponible et bien entendu de faire les mises à jours via Windows update.

 

 

https://support.microsoft.com/en-us/kb/3125574

https://support.microsoft.com/en-us/kb/3156417

 

 

 

SQL Server 2016 : Configuration tempdb à l’Installation

Avec SQL Server 2016 nous aurions la possibilité de configurer la base de données tempdb dans le cadre du processus d’installation.

Un nouvel onglet a été ajouté à la rubrique de configuration du serveur de base de donnés sous le nom de tempdb et il nous permettra de préciser :

  1. Le nombre de fichiers de données de la base de données tempdb
  2. La taille initiale de chaque fichier et le taux de croissance en Mb
  3. La possibilité d’ajouter plusieurs emplacements pour le stockage des fichiers tempdb
  4. L’emplacement et la taille du fichier log de la base de données tempdb