• 1 heure
  • Moyenne
Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Introduction du cours

Depuis plusieurs années, les versions de Windows intègrent le langage PowerShell nativement. Celui-ci est devenu au fil du temps bien plus qu'un "simple" langage de scripting puisque vous pouvez même développer des interfaces GUI en PowerShell… mais ce n'est pas l'objet de ce cours.

Non, ici, l'objectif est de vous expliquer comment PowerShell peut vous aider dans votre quotidien d'administrateur systèmes de manière simple et très concrète, puis de vous montrer comment créer votre premier script ! Il vous permettra de gérer vos utilisateurs dans l'Active Directory.

Pourquoi administrer mes machines avec PowerShell ?

Si vous êtes administrateur systèmes, connaître un langage de scripting ne vous sera pas seulement utile pour faire bien sur votre CV ! Cela va surtout vous aider dans vos tâches d'administration. En effet, l'utilisation de scripts permet d'automatiser des actions sur les systèmes… et donc de vous simplifier la vie !

Les versions de PowerShell

Depuis sa création, PowerShell a évolué jusqu'à devenir un langage puissant et très flexible qu'il est relativement simple d'appréhender.

Lors de la rédaction de ce cours, la dernière version officiellement en production est le Windows Management Framework 4. La version 5 est actuellement dans un statut "Preview" et sera intégrée dans la nouvelle version de Windows Serveur 2016.

L'environnement d'écriture des scripts

Pour écrire nos scripts dans ce cours, nous utiliserons l'éditeur de script intégré à Windows appelé Windows PowerShell ISE. Au quotidien, je vous le recommande car il est très simple à utiliser et surtout intégré à chaque version de Windows (serveur ou poste de travail).

Aperçu de Windows PowerShell ISE
Aperçu de Windows PowerShell ISE

L'historique

Pour ceux qui sont des habitués des scripts batch, vous retrouverez certaines commandes telles que dir, cd, cls, copy… Pour ceux qui viennent du monde Unix, des commandes de bases sont également implémentées : ls, mkdir et pwd entre autres.

Vous pourrez donc facilement écrire vos premiers scripts PowerShell pour effectuer des tâches simples.

Préparation de votre premier script

Prenons comme exemple notre machine Windows. Pour ma part, je travaille sur une machine Windows 10 et  une machine Windows Server 2012 R2. Vos systèmes d'exploitation ont peu d'importance mais les cmdlets que nous verrons dans ce cours sont compatibles avec WMF 4.0.

Autoriser l'exécution de scripts

Par défaut, PowerShell est configuré en mode "Restricted". Dans ce cours, nous allons le basculer en mode "Unrestricted" pour faciliter sa prise en main.

Qu'est-ce que cela signifie ?

Il est possible d'indiquer à PowerShell plusieurs modes d'exécution. Chaque mode implique un certain comportement.

  • Restricted : aucun script ne peut être exécuté. PowerShell est utilisable uniquement en mode interactif.

  • AllSigned : seuls les scripts signés peuvent être exécutés.

  • RemoteSigned : les scripts téléchargés depuis Internet doivent être signés pour être exécutés. Les scripts présents sur votre poste de travail ne sont pas concernés et peuvent être exécutés.

  • Unrestricted : pas de restrictions. Les scripts peuvent être exécutés.

Si vous souhaitez connaître le mode actuellement utilisé, lancez la cmdlet Get-ExecutionPolicy.

PS> Get-ExecutionPolicy

Pour changer de mode, il suffit d'utiliser la cmdlet Set-ExecutionPolicy.

PS> Set-ExecutionPolicy Unrestricted

À partir de maintenant, vous pouvez exécuter n'importe quel script .ps1 ! :)

Importer des modules dans vos scripts

L'utilisation de module est parfois nécessaire afin de pouvoir profiter de certaines fonctions déjà existantes. Pour obtenir les modules chargés sur la machine, il suffit d'exécuter la cmdlet suivante :

PS> Get-Module

Si vous souhaitez en ajouter, vous pouvez lister les modules disponibles :

PS> Get-Module -ListAvailable

Lorsque vous avez identifié le module dont vous aurez besoin pour la rédaction de votre script, il vous suffira de l'importer via la cmdlet Import-Module. Dans mon exemple ci-dessous, je décide d'importer le module Active Directory :

PS> Import-Module ActiveDirectory

Création du script

Ok, maintenant nous allons créer un premier script qui sera relativement simple mais qui nous facilitera la gestion de nos utilisateurs dans l'Active Directory.

Je souhaite obtenir la liste de tous mes utilisateurs Active Directory dont la dernière connexion est supérieure à 90 jours afin de verrouiller leur compte pour des raisons de sécurité. Être proactif n'a jamais fait de mal à personne, alors nous ajouterons l'envoi d'un email automatique au help desk (assistance) pour les informer de cette désactivation.

Prérequis

Commencez par ouvrir votre éditeur préféré, Windows PowerShell ISE ou autre. Commencez par indiquer quelques commentaires sur le contenu de votre script, suivis du type d'exécution que vous souhaitez. Et enfin, importez le module PowerShell Active Directory.

Vous devriez obtenir quelque chose comme ça :

# Script pour automatiser la désactivation des comptes AD dont la dernière connexion > 90 jours
# version 1.0
# Auteur : Nicolas PRIGENT

# Force le type d'execution
Set-ExecutionPolicy Unrestricted

# Importe le module AD
Import-Module ActiveDirectory

La recherche Active Directory

Pour lister les utilisateurs concernés, vous pouvez utiliser la cmdlet Search-ADAccount suivie de plusieurs paramètres :

  • UsersOnly : recherche uniquement des objets de type "account"

  • AccountInactive : recherche les comptes qui ne se sont pas connectés depuis une certaine période

  • TimeSpan : indique la durée d'inactivité

  • SearchBase : recherche uniquement dans cette unité d'organisation

$LockedAccount = Search-ADAccount -UsersOnly -AccountInactive -TimeSpan 90.00:00:00 -SearchBase "OU=Users,DC=Domaine,DC=Local" | Where {$_.enabled}

Terminez en filtrant uniquement sur les comptes actifs via la clause Where-Object.

Et voilà ! Vous disposez maintenant d'une liste de comptes dont la dernière connexion est supérieure à 90 jours via la variable $LockedAccount.

À présent, vous pouvez facilement désactiver tous ces comptes via la commande suivante :

$LockedAccount | Set-ADUser

L'envoi de l'email

Il ne vous reste plus qu'à envoyer un email au help desk afin de lui indiquer la liste des comptes désactivés. Pour cela, déclarez quelques variables (serveur SMTP, expéditeur, destinataire, sujet du mail, corps du mail) : vous les utilisez ensuite dans la cmdlet Send-MailMessage, vous permettant ainsi d'envoyer l'email.

$smtpServer = "mail.domaine.local"
$from = "DisableADAccount <powershell@domaine.local>"
$to = "Helpdesk <helpdesk@domaine.local>"
$subject = "[INFO] Comptes AD last logon > 90 jours"
$body = "
<html>
  <head></head>
     <body>
        <p>Bonjour,<br />
           Les comptes suivants sont d&eacute;sactiv&eacute; &agrave; cause d'une inactivit&eacute; de plus de 90 jours<br />:
           $LockedAccount
        </p>
      </body>
</html>"

Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body $body -bodyasHTML -priority High

Résultat

Voici le script PowerShell complet que vous venez de rédiger :

Conclusion

Il s'agit ici d'un premier cours générique vous permettant de rédiger votre premier script, ceci afin de mettre en lumière que PowerShell est un outil formidable mis à votre disposition. Encore une fois, tout administrateur systèmes souhaitant simplifier son quotidien et automatiser le maximum de tâches aura intérêt à se servir de PowerShell. J'espère que cet article aura éveillé votre intérêt quant à son utilité au quotidien ! 

Par la suite, vous pourrez étudier plus en détails de quelle manière PowerShell intervient dans le périmètre d'actions de l'administrateur système.

  

Aussi sur OpenClassrooms

Guide du développeur Windows 10

Guide du développeur Windows 10

Exemple de certificat de réussite
Exemple de certificat de réussite