Académique Documents
Professionnel Documents
Culture Documents
Windows PowerShell Tutorial For Beginners FR
Windows PowerShell Tutorial For Beginners FR
Windows Powershell
pour débutants
Table des matières
Introduction 4
1.4 Commentaires 11
2.10 Déplacer des utilisateurs et des ordinateurs vers une nouvelle unité d’organisation 26
2
3. Top 10 des tâches de gestion du système de fichiers avec PowerShell 28
Conclusion 45
À propos de Netwrix 47
3
Introduction
Automatisons, automatisons. Mais où est passé ce script?...
Attention : PowerShell crée une dépendance!
Windows PowerShell est un moteur d’automatisation orienté objet ainsi qu’un langage de script. Doté d’un
interpréteur de commandes interactif, il est conçu pour aider les professionnels de l’informatique à
configurer les systèmes et automatiser les tâches d’administration. Il est intégré à tous les systèmes
d’exploitation Windows modernes depuis Windows 2008 R2.
L’apprentissage de Windows PowerShell peut-être comparé à l’apprentissage d’un outil polyvalent. Dans cet
eBook, nous vous expliquerons les bases des scripts PowerShell, l’utilisation des commandes et scripts
PowerShell pour effectuer les tâches administratives les plus courantes et la manière de programmer dans
le temps vos scripts et commandes PowerShell.
4
1. Rédiger des scripts PowerShell : les bases
Dans cette section, nous allons aborder les bases des scripts PowerShell. Cela vous permettra d’effectuer
plus facilement la plupart des tâches d’administration dans votre environnement informatique Windows.
PowerShell comprend une option de ligne de commande et un environnement d’écriture de scripts intégré (ISE) :
Pour ouvrir la ligne de commande PowerShell, tapez powershell.exe dans le menu Démarrer de Windows.
Un écran comme celui-ci s’affiche :
Pour lancer l’ISE PowerShell, tapez powershell_ise.exe dans le menu Démarrer. L’utilisation de l’ISE Power-
Shell est la meilleure façon de travailler avec le langage de script, car cet environnement offre une
surbrillance syntaxique, un remplissage automatique des commandes et d’autres fonctions d’automatisa-
tion qui simplifient la rédaction et le test des scripts.
5
1.2 Préparation à l’exécution des scripts PowerShell
Les scripts PowerShell sont stockés dans des fichiers .ps1. Vous ne pouvez pas exécuter un script en
double-cliquant simplement sur son fichier, ceci évite d’endommager accidentellement vos systèmes. Au lieu
de cela, cliquez avec le bouton droit de la souris sur le fichier et sélectionnez Exécuter avec PowerShell :
Restricted — Aucun script n’est autorisé. Il s’agit du paramètre par défaut, que vous verrez donc lors de
votre première exécution de la commande.
AllSigned — Vous pouvez exécuter les scripts signés par un développeur de confiance. Ce paramétrage
vous demandera, avant l’exécution d’un script, de confirmer que vous souhaitez bien l’exécuter.
RemoteSigned — Vous pouvez exécuter vos propres scripts ou les scripts signés par un développeur de
confiance.
Unrestricted — Vous pouvez exécuter tous les scripts que vous voulez.
Pour commencer à travailler avec PowerShell, changez le paramétrage de cette politique en la passant de
Restricted à RemoteSigned, à l’aide de la commande Set-ExecutionPolicy RemoteSigned :
6
1.3 Les cmdlets PowerShell
Un cmdlet est une commande PowerShell qui a une fonction prédéfinie, comme un opérateur dans un
langage de programmation. Voici quelques informations importantes concernant les cmdlets :
Les cmdlets fournissent des résultats sous forme d’objet ou de tableau d’objets.
Les cmdlets peuvent obtenir des données à analyser ou transférer des données vers un autre cmdlet par
le biais de canaux (je reviendrai sur ces canaux – ou pipes – dans un instant).
Les cmdlets sont « insensibles à la casse ». C’est-à-dire que les majuscules et minuscules n’ont aucune
importance, vous pouvez tout aussi bien taper Get-ADUser, get-aduser ou gEt-AdUsEr.
Si vous voulez utiliser plusieurs cmdlets dans une même chaîne, vous devez les séparer par un
point-virgule (;).
Un cmdlet se compose toujours d’un verbe (ou d’un mot qui fait office de verbe) et d’un nom, séparés par un
trait d’union (c’est la règle « verbe-nom »). Voici quelques exemples de verbes :
Get — Obtenir
Set — Définir
Start — Commencer
Out — Générer
New — Pour créer quelque chose (« new » n’est pas un verbe, mais fonctionne de la même manière)
7
Get-Service — Affiche la liste des services et leur état
Bonne nouvelle : vous n’avez pas à mémoriser tous les cmdlets. Vous pouvez afficher la liste de tous les
cmdlets en exécutant le cmdlet Get-Help-Category, qui renvoie ce qui suit :
Chaque cmdlet est assorti de plusieurs paramètres qui permettent de personnaliser son action. Dès que
vous avez tapé un cmdlet et un trait d’union (-), l’ISE PowerShell propose automatiquement tous les
paramètres valides et leurs types.
8
Par exemple, le cmdlet suivant affiche tous les services dont le nom commence par « W » :
Get-Service -Name W*
Si vous oubliez les paramètres d’un cmdlet, utilisez un script comme ci-dessous, qui affiche les paramètres
du cmdlet Get-Process :
Get-Process | Get-Member
Si vous ne trouvez toujours pas le cmdlet dont vous avez besoin, vérifiez que votre aide est à jour et obtenez
des exemples relatifs au cmdlet qui vous intéresse (par exemple Get-Process) en utilisant un script comme
celui-ci :
9
Vous pouvez également utiliser des alias, qui sont des noms de cmdlet abrégés. Par exemple, au lieu de
saisir Get-Help, vous pouvez vous contenter de Help. Essayez d’exécuter les deux commandes suivantes et
voyez si vous obtenez le même résultat :
Start-Process notepad
start notepad
De même, pour arrêter le processus, vous pouvez utiliser l’une des commandes suivantes :
10
1.4 Commentaires
Le fait de laisser des commentaires dans un script vous aidera – ainsi que vos collègues – à mieux
comprendre ce que fait le script concerné. Un commentaire chaîne est une ligne unique qui commence par
un dièse (#) ; les commentaires blocs s’étendent sur plusieurs lignes, commençant et se terminant par des
dièses et des chevrons :
Un canal permet de transférer des données d’un cmdlet à un autre. Précédemment, j’ai utilisé un canal pour
obtenir toutes les propriétés d’un objet.
Si, par exemple, vous exécutez le script suivant, vous obtiendrez tous les services triés selon leur état :
Vous pouvez également utiliser un canal pour envoyer du texte dans un fichier à l’aide d’un script comme le suivant :
Vous pouvez utiliser plusieurs canaux. Par exemple, le script suivant dresse la liste de tous les services, le
premier canal excluant les services arrêtés et le second limitant la liste aux noms d’affichage :
11
2. Top 10 des tâches de gestion d’Active
Directory avec PowerShell
Le plus facile, pour gérer des objets dans un domaine Active Directory, est d’utiliser le composant logiciel
enfichable MMC Utilisateurs et ordinateurs Active Directory. Mais que faire si vous devez créer de nombreux
comptes d’utilisateur, ou si Utilisateurs et ordinateurs Active Directory n’est pas disponible pour une raison
ou pour une autre ? Dans cette section, nous allons voir comment effectuer les tâches de gestion d’AD les
plus courantes avec PowerShell.
Gardez à l’esprit que pour pouvoir travailler avec Active Directory et ses objets, vous devez importer le
module Active Directory pour Windows PowerShell. Dans Microsoft Windows Server 2008 R2, vous devez
activer ce module en exécutant la commande suivante :
Import-Module ActiveDirectory
Dans Microsoft Windows Server 2012 et les versions ultérieures, ce module est activé par défaut.
Vous pouvez créer de nouveaux comptes d’utilisateur dans Active Directory en utilisant le cmdlet
New-ADUser. Pour obtenir sa syntaxe complète, exécutez la commande suivante :
Une fois que l’on connaît la syntaxe, il est facile d’ajouter des utilisateurs à Active Directory :
New-ADUser B.Johnson
12
Les comptes sont créés avec les propriétés par défaut suivantes :
Compte désactivé.
Donc, pour créer un nouveau compte réellement fonctionnel, nous devons l’activer avec le cmdlet
Enable-ADAccount et lui donner un mot de passe avec le cmdlet Set-ADAccountPassword.
Surname — Robinson
Path — “OU=Managers,DC=enterprise,DC=com”
Status — Activé
Le paramètre Read-Host vous demandera de saisir un nouveau mot de passe. Remarquez que le mot de
passe doit satisfaire les exigences de longueur, de complexité et d’historique de votre politique de sécurité
pour le domaine.
13
Créons à présent dix comptes Active Directory similaires d’un coup et définissons un mot de passe par
défaut (P@ssw0rd) pour chacun d’entre eux. Pour envoyer le mot de passe par défaut dans un état protégé,
nous devons nous servir du paramètre ConvertTo-SecureString.
Pour donner au script plus de flexibilité, ajoutez le paramètre Read-Host, qui demandera le nombre
d’utilisateurs à ajouter :
$path="OU=IT,DC=enterprise,DC=com"
$username=Read-Host "Entrer le nom"
$n=Read-Host "Entrer le numéro"
$count=1..$n foreach ($i in $count)
{ New-AdUser -Name $username$i -Path $path -Enabled $True -ChangePasswordAtLogon $true `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -passThru }
14
Une autre option pour créer des utilisateurs dans AD consiste à les importer depuis un fichier CSV. Cette
option est idéale lorsque vous avez une liste d’utilisateurs avec des détails personnels prédéfinis tels que :
Prénom
Nom
Identifiant
Service
MotDePass
e OU
Le fichier CSV doit être encodé en UTF8 et contenir des données de contact qui ressemblent à ceci :
Le script suivant créera des objets utilisateurs activés pour tous les utilisateurs présents dans le fichier CSV
qui n’ont pas encore de comptes dans AD. L’option « Réinitialiser le mot de passe lors de la prochaine
connexion » sera activée pour les nouveaux comptes, vous pouvez donc utiliser votre mot de passe par
défaut :
15
Entrer un chemin d’accès vers votre fichier d’importation CSV
$ADUsers = Import-csv C:\scripts\newusers.csv
#Le compte sera créé dans I’unité d’organisation indiquée dans la variable $OU du
fichier CSV ; n’oubliez pas
de changer le nom de domaine dans la variable «
-UserPrincipalName ».
-SamAccountName $Username `
-UserPrincipalName "$Username@yourdomain.com" `
-Name "$Firstname $Lastname" `
-GivenName $Firstname `
-Surname $Lastname `
-Enabled $True `
-ChangePasswordAtLogon $True `
-DisplayName "$Lastname, $Firstname" `
-Department $Department `
-Path $OU `
-AccountPassword (convertto-securestring $Password -AsPlainText -Force)
}
}
16
Une fois le script exécuté, deux nouveaux utilisateurs, Edward Franklin et Bill Jackson, ont été ajoutés à notre
domaine Active Directory :
Pour créer un objet ordinateur, utilisez le cmdlet New-ADComputer. Par exemple, exécutez le cmdlet suivant
pour créer un objet ordinateur ayant « WKS932 » comme nom et comme valeur de chemin LDAP par défaut :
Si vous disposez d’une liste d’ordinateurs qui doivent être importés dans Active Directory, enregistrez cette
liste dans un fichier CSV avec l’en-tête « computer » et la liste des noms d’ordinateurs dans la colonne située
en dessous. Exécutez le script PowerShell suivant sur votre contrôleur de domaine pour ajouter des
ordinateurs depuis le fichier CSV, en vous assurant que les variables Path (Chemin) et File (Fichier) sont
correctement définies :
17
2.2 Rattacher un ordinateur à un domaine et retirer un ordinateur
d’un domaine
Une autre tâche courante consiste à rattacher un ordinateur à un contrôleur de domaine. Pour rattacher un
PC à un domaine Active Directory, exécutez localement le script PowerShell suivant :
L’ordinateur redémarrera et sera ensuite rattaché au domaine ; il sera ajouté au conteneur par défaut. Pour
rattacher un ordinateur à un contrôleur de domaine à distance, affinez ce script de cette façon :
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dc\T.Simpson"
$pc = "R07GF" # Spécifier l’ordinateur qui doit être rattaché au domaine.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -ComputerName $pc -LocalCredential $pc\admin -DomainName $dc -Credential
$creds -Verbose -Restart -Force
Vous pouvez ajouter plusieurs ordinateurs au domaine, soit en les spécifiant dans la ligne de commande
sous forme de liste délimitée par des virgules, soit en important leurs noms à partir d’un fichier texte. Voici
comment spécifier les ordinateurs dans une liste délimitée par des virgules :
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dc\T.Simpson"
$pc = "WKS034, WKS052, WKS057" # Spécifier les ordinateurs à rattacher au domaine.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -ComputerName $pc -LocalCredential $pc\admin -DomainName $dc -Credential
$creds -Restart -Force
18
Et voici comment utiliser un fichier texte avec la liste des ordinateurs qui doivent être rattachés :
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dc\T.Simpson"
$pc = Get-Content -Path C:\Computers.txt # Spécifier le chemin d’accès à la liste d’ordinateurs.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -ComputerName $pc -LocalCredential $pc\admin -DomainName $dc -Credential
$creds -Restart -Force
Pour retirer un ordinateur d’un domaine à distance, utilisez le cmdlet Remove-Computer. Ici, nous retirons un
ordinateur d’un domaine, aucune accréditation locale n’est donc nécessaire et nous pouvons ignorer le
paramètre –LocalCredential :
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dc\T.Simpson"
$pc = "R07GF"
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Remove-Computer -ComputerName $pc -Credential $creds –Verbose –Restart –Force
Pour retirer plusieurs ordinateurs à l’aide d’une liste dans un fichier TXT, utilisez le script ci-dessus (qui
rattachait des ordinateurs à un contrôleur de domaine), en remplaçant le cmdlet Add-Computer par
Remove-Computer. Remarquez que vous aurez toujours besoin des identifiants d’administrateur de
domaine pour effectuer cette opération de séparation.
Pour changer le nom d’un ordinateur, utilisez le cmdlet Rename-Computer. Remarquez que l’ordinateur
doit être en ligne et connecté à Active Directory.
19
Vous pouvez améliorer le script de changement de nom en rattachant l’ordinateur au domaine et en le
mettant simultanément dans l’OU spécifiée.
Le script doit être exécuté sur la machine cible, et non sur le contrôleur de domaine.
Le script demandera les identifiants d’un compte disposant des autorisations nécessaires pour rattacher des
ordinateurs au domaine, et ensuite l’ordinateur sera renommé, redémarré et rattaché au domaine.
Les identifiants d’ordinateur sont généralement inconnus de l’utilisateur car ils sont définis de manière
aléatoire par l’ordinateur.
Mais vous pouvez définir votre propre mot de passe ; voici un script PowerShell qui le permet :
20
Si vous spécifiez un nom de compte d’ordinateur, n’oubliez pas d’ajouter un signe dollar ($) à la fin du nom ;
sinon, une erreur se produira à l’exécution du script.
Vous pouvez également désactiver des comptes en masse à l’aide d’une liste dans un fichier texte :
Si vous disposez d’un fichier texte contenant la liste des ordinateurs anciens, vous pouvez simplifier la tâche
de leur suppression à l’aide de PowerShell. Le script suivant lira les noms des ordinateurs à partir d’un fichier
TXT et supprimera les comptes correspondants via un pipeline :
21
Les comptes périmés d’Active Directory peuvent être compromis, ce qui entraîne des incidents de sécurité,
il est donc essentiel de les surveiller. Ce script PowerShell interroge Active Directory et retourne tous les
ordinateurs qui n’ont pas été connectés au cours des 30 derniers jours. Il supprimera également ces
comptes pour maintenir propre votre AD.
$stale = (Get-Date).AddDays(-30) # c’est-à-dire 30 jours depuis la dernière connexion ; peut être
changé en n’importe quel nombre.
Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $stale} | FT
Name,lastLogonDate
Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $stale} |
Si vous souhaitez désactiver, plutôt que supprimer, les comptes d’ordinateur inactifs, remplacez
le cmdlet Remove-ADComputer par le paramètre et la valeur Set-ADComputer et -Enabled $false.
Souvenez-vous qu’il est essentiel de suivre de près toutes les modifications apportées aux comptes
d’ordinateur, afin de pouvoir repérer rapidement toute modification indésirable et y répondre de
manière appropriée.
22
Si vous ne connaissez pas encore bien les groupes AD et la gestion de ces groupes, veuillez lire le
guide de bonnes pratiques de gestion des groupes Active Directory avant de poursuivre.
Pour créer un groupe AD, utilisez le cmdlet New-ADGroup. Sa syntaxe complète peut être obtenue en exécutant
la commande suivante :
Le système vous demandera de spécifier le paramètre GroupScope, puis créera un nouveau groupe.
Ce groupe sera assorti de valeurs par défaut, telles que :
Les champs Membres, Membre de, Description, E-mail et Notes seront tous vides.
Créons un groupe de sécurité appelé « Qualité » dans l’unité d’organisation « Production » (-Path), il devra
être un groupe de sécurité (-GroupCategory) et il devra être global (-GroupScope).
Si vous voulez créer un groupe de distribution universel, changez simplement le paramètre –GroupCategory en «
Distribution » et le paramètre –GroupScope en « Universel ». Vous pouvez également modifier le chemin LDAP en
modifiant le paramètre –Path. Pour supprimer un groupe AD, utilisez le cmdlet Remove-ADGroup. Pour cela, le script
le plus simple ressemblera à ceci :
23
2.8 Ajouter des utilisateurs et des ordinateurs à un groupe
Après avoir ajouté des utilisateurs à un groupe de sécurité, vous pouvez exécuter ce script pour vérifier qu’ils
sont bien répertoriés comme membres :
Si vous devez ajouter des utilisateurs à un autre groupe de sécurité ou de distribution, tel que « Admins du
domaine », indiquez « Admins du domaine » comme valeur pour le paramètre –Identity. Si vous souhaitez
qu’un groupe soit membre d’un autre groupe, spécifiez un nom de groupe comme valeur pour le paramètre
–Members. Le même principe s’applique aux comptes d’ordinateur, mais vous devrez ajouter un signe dollar
($) à la fin du nom du compte d’ordinateur. Par exemple, pour ajouter l’ordinateur « WKS043 » à un groupe,
spécifiez « WKS043$ » comme valeur pour le paramètre –Member :
Si vous souhaitez ajouter un grand nombre d’utilisateurs à un groupe, vous pouvez les spécifier dans un
fichier CSV et ensuite importer ce fichier. Remarquez que la liste des noms d’utilisateur dans le fichier CSV doit
contenir les SamAccountNames dans la colonne « users » (utilisateurs), comme indiqué ci-dessous :
24
Pour ajouter des utilisateurs à un groupe à partir d’un fichier CSV, exécutez le script PowerShell suivant :
Pour copier tous les membres d’un groupe dans un autre groupe, exécutez le script suivant :
Pour supprimer un compte d’ordinateur d’un groupe, spécifiez le nom de l’ordinateur terminé par le signe
dollar ($) pour la valeur du paramètre -Members.
Une méthode facile pour supprimer plusieurs utilisateurs d’un groupe AD est de créer un fichier CSV contenant
la liste des noms d’utilisateur, puis de supprimer ces utilisateurs de l’objet du groupe à l’aide de ce script :
25
Remarquez que l’utilisateur perdra toute appartenance à un groupe, à l’exception de « Utilisateurs du
domaine », qui peut être supprimée manuellement si nécessaire.
N’oubliez pas d’activer la fonction Corbeille Active Directory (en anglais) pour pouvoir facilement annuler
vos modifications en cas de problème.
2.10 Déplacer des utilisateurs et des ordinateurs vers une nouvelle unité
d’organisation
Le cmdlet PowerShell Move-ADObject déplace un objet ou ensemble d’objets (par exemple un utilisateur,
un ordinateur, un groupe ou une OU) vers une OU spécifiée. Le paramètre -Identity spécifie l’objet ou le
conteneur Active Directory à déplacer. Remarque : vous devez saisir le chemin LDAP complet ou le SID de
l’objet ; vous ne pouvez pas utiliser son nom de compte SAM. Voici comment déplacer l’utilisateur « John
Brown » vers l’OU « Districts » :
Utilisez la même syntaxe pour déplacer des objets ordinateurs. La commande suivante déplace l’ordinateur
« R07GF » vers le conteneur « Computers » :
Si vous avez une liste prédéfinie d’objets à déplacer, vous pouvez l’enregistrer dans un fichier CSV puis
importer ce fichier dans Active Directory. La liste CSV doit se présenter au format suivant :
26
Utilisez ce script PowerShell pour déplacer les comptes d’utilisateur AD répertoriés dans un fichier CSV :
$Imported_csv | ForEach-Object {
# Récupérer le nom de domaine de l’utilisateur.
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# Déplacer l’utilisateur vers l’OU cible.
Move-ADObject -Identity $UserDN -TargetPath $TargetOU
}
Pour déplacer des comptes d’ordinateur AD répertoriés dans un fichier texte, utilisez le script PowerShell
suivant :
27
3. Top 10 des tâches de gestion du système
de fichiers avec PowerShell
Chaque jour, les administrateurs système doivent effectuer une série d’opérations standard sur les
nombreux fichiers et dossiers de leurs serveurs Windows, depuis la gestion des données des utilisateurs
dans les ressources partagées jusqu’à la maintenance adéquate des sauvegardes. À l’aide des informations
suivantes, vous pouvez automatiser un grand nombre de ces tâches et gagner du temps pour des missions
plus importantes.
Dans cette partie, nous allons expliquer comment automatiser la gestion des fichiers et des tâches de
gestion des autorisations NTFS à l’aide de scripts PowerShell.
Pour consulter le contenu d’un répertoire dans un serveur de fichiers Windows, utilisez le cmdlet
Get-ChildItem.
Pour afficher tous les fichiers cachés, ajoutez le paramètre -Force. La commande ci-dessous affiche tous les
objets racines du dossier « Shared » (Partagé).
Si vous souhaitez également consulter tous les sous-dossiers et leur contenu, ajoutez le paramètre -Recurse :
Pour filtrer les résultats, ajoutez les paramètres Filter (Filtrer), Exclude (Exclure), Include (Inclure) et Path
(Chemin) au cmdlet Get-ChildItem. Pour un filtrage avancé des objets, utilisez le cmdlet Where-Object. Le
script ci-dessous recherche tous les fichiers exécutables dans le dossier IT, qui ont été modifiés après le 1er
avril 2018.
28
3.2 Créer des fichiers et des dossiers
Pour créer de nouveaux objets avec Windows PowerShell, vous pouvez utiliser le cmdlet New-Item et spécifier
le type d’élément que vous souhaitez créer, par exemple un répertoire, un fichier ou une clé de registre.
Si vous devez créer un fichier et y écrire des données, deux méthodes intégrées au moins vous le
permettent.
Vous pouvez également créer des fichiers à l’aide du cmdlet Export-Csv, qui exporte le résultat dans un
fichier csv pouvant être ouvert dans Excel :
29
3.3 Supprimer des fichiers et des dossiers
Pour supprimer des objets, utilisez le cmdlet Remove-Item. Si l’objet n’est pas vide, vous serez invité à
confirmer la suppression. Voici comment supprimer le dossier « IT », tous ses sous-dossiers et les fichiers
qu’il contient :
Si vous avez déjà vérifié que tous les objets d’un dossier doivent être supprimés, vous pouvez utiliser le
switch -Recurse pour sauter l’étape de confirmation :
Vous devez parfois nettoyer les vieux fichiers d’un répertoire particulier. Voici comment accomplir cette tâche :
$Folder = "C:\Backups"
30
Voici comment vérifier qu’un fichier existe, et le supprimer si tel est le cas :
$FileName = ’C:\data\log.txt’
If (Test-Path $FileName){
Remove-Item $FileName
}
Pour supprimer des fichiers sur des ordinateurs distants, vous devez disposer des autorisations de
sécurité permettant d’y accéder. Veillez à utiliser les chemins d’accès UNC, pour que le script
détermine correctement l’emplacement des fichiers.
Le cmdlet Copy-Item vous permet de copier des objets d’un chemin d’accès à un autre. La commande
suivante crée une sauvegarde en copiant le fichier users.xlsx depuis un ordinateur distant (fs) et en
l’enregistrant dans un autre (fs2) via le réseau :
Si vous copiez des fichiers vers ou depuis des ordinateurs distants, veillez à utiliser les chemins d’accès UNC.
Utilisez par exemple cette commande pour copier des fichiers d’un serveur de fichiers distant dans le
répertoire local C :
31
Pour copier des fichiers depuis votre répertoire local vers le dossier distant, il suffit d’inverser les
emplacements source et destination :
Vous pouvez également copier des fichiers d’un serveur distant vers un autre. Le script suivant copie de
manière récursive le dossier \\fs\Shared\temp vers \\fs\Shared\test:
Pour ne copier que certains fichiers depuis la source vers la destination, utilisez le paramètre -Filter.
Par exemple, la commande suivante ne copie que les fichiers txt d’un dossier à l’autre :
Vous pouvez également exécuter les commandes XCOPY et ROBOCOPYpour copier des fichiers, ou utiliser
des objets COM, comme dans l’exemple ci-dessous :
Le cmdlet Move-Item déplace un élément avec ses propriétés, son contenu et ses éléments enfants, d’un
emplacement à un autre.
Il peut également déplacer un fichier ou un sous-répertoire depuis un répertoire vers un autre emplacement.
La commande suivante déplace un fichier de sauvegarde spécifique d’un emplacement à un autre :
Ce script déplace tout le dossier Backups (Sauvegardes) et son contenu vers un autre emplacement :
Le répertoire Backups et tous ses fichiers et sous-dossiers apparaîtront alors dans le répertoire archive.
32
3.6 Renommer des fichiers
Le cmdlet Rename-Item vous permet de modifier le nom d’un objet en ne touchant pas à son contenu. Il
n’est pas possible de déplacer des éléments avec la commande Rename-Item. Pour cela, vous devez utiliser
le cmdlet Move-Item, tel qu’expliqué précédemment.
Pour pouvoir mettre en œuvre un modèle de moindre privilège (une bonne pratique pour la sécurité
système), les spécialistes de la sécurité informatique et les administrateurs système configurent des listes de
contrôle d’accès (ACL) NTFS en ajoutant des entrées de contrôle d’accès (ACE) sur les serveurs de fichiers
NTFS. Il existe des autorisations NTFS élémentaires et avancées. Pour chaque autorisation, vous pouvez
choisir « Autoriser » ou « Refuser ». Vous pouvez trouver toutes ces autorisations d’utilisateur en exécutant
le script PowerShell suivant :
[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])
Si vous ne maîtrisez pas bien la gestion des autorisations NTFS, consultez ce guide des bonnes
pratiques de gestion des autorisations NTFS (en anglais).
Le cmdlet PowerShell set-acl sert à modifier le descripteur de sécurité d’un élément spécifié, par exemple un
fichier, un dossier ou une clé de registre ; en d’autres termes, il sert à modifier les autorisations des fichiers
ou dossiers. Le script suivant règle l’autorisation « Contrôle total » sur « Autoriser » pour l’utilisateur «
ENTERPRISE\T.Simpson » sur le dossier « Sales » :
33
$acl = Get-Acl \\fs1\shared\sales
$AccessRule = New-Object
System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\T.Simpson","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\sales
Remarquez que le paramètre SetAccessRule écrase complètement les autorisations d’un utilisateur ou d’un
groupe, vous pouvez donc modifier les autorisations des dossiers à l’aide de ce paramètre. Si vous souhaitez
seulement ajouter des autorisations, utilisez plutôt le paramètre AddAccessRule. Par exemple, le script
suivant ajoute l’autorisation « FullControl » au compte d’utilisateur « ENTERPRISE\J.Carter » pour le dossier «
Accounting » (Comptabilité) :
Voici les autres autorisations que vous pouvez attribuer aux utilisateurs ou aux groupes de sécurité :
Suppression Delete
Appropriation TakeOwnership
34
Des ensembles de droits d’accès élémentaires peuvent également être appliqués :
Ensemble de droits d’accès Droits inclus dans l’ensemble Nom de l’ensemble dans
Autorisations de lecture
Écriture de données
Autorisations de lecture
Suppression
Autorisations de lecture
35
Pour pouvoir copier les autorisations, l’utilisateur doit être propriétaire des dossiers source et cible.
La commande suivante copie les autorisations du dossier « Accounting » (Comptabilité) dans le dossier
« Sales » (Ventes) :
Si vous souhaitez obtenir une liste des autorisations NTFS en passant par PowerShell, vous pouvez
suivre ces instructions simples pour exporter les autorisations NTFS vers un fichier CSV (en anglais).
Notez que RemoveAccessRule ne supprime que des autorisations spécifiques. Pour effacer complètement
les autorisations de T.Simpson dans le dossier « Sales », utilisez la commande PurgeAccessRules :
Remarquez que PurgeAccessRules ne fonctionne pas avec un nom d’utilisateur en chaîne, elle fonctionne
uniquement avec des SID. Pour cette raison, nous avons utilisé la classe « Ntaccount » pour convertir le nom
de compte d’utilisateur d’une chaîne en un SID. Remarquez également que PurgeAccessRules ne fonctionne
qu’avec des autorisations explicites ; elle ne purge pas les droits hérités.
36
3.9 Activer et désactiver les héritages d’autorisations
Les autorisations NTFS peuvent être explicites ou héritées. Les autorisations explicites sont configurées
individuellement, tandis que les autorisations héritées sont issues du dossier parent. La hiérarchie des
autorisations est la suivante :
Refus explicite
Autorisation explicite
Refus hérité
Autorisation héritée
Pour gérer l’héritage, nous utilisons la méthode SetAccessRuleProtection. Celle-ci a deux paramètres :
Le premier paramètre permet de bloquer l’héritage du dossier parent. Il possède deux états : « $true »
et « $false ».
Le deuxième paramètre détermine si les autorisations héritées courantes doivent être conservées ou
supprimées.
Il possède les deux mêmes états : « $true » et « $false ».
Désactivons l’héritage pour le dossier « Sales » (Ventes) et supprimons également toutes les autorisations
héritées :
Toutes les autorisations héritées ont été supprimées ; seules les autorisations d’accès explicitement ajoutées
sont conservées. Annulons cette modification et réactivons l’héritage pour le dossier « Sales » :
37
3.10 Modifier la propriété des fichiers et dossiers
Pour définir le propriétaire d’un dossier, vous devez exécuter la méthode SetOwner.
Remarquez que nous avons à nouveau utilisé la classe Ntaccount pour convertir le nom de compte
d’utilisateur de chaîne en SID.
La méthode SetOwner ne permet pas de changer le propriétaire d’un compte ; le compte doit disposer des
droits « Appropriation », « Lecture » et « Modifier les autorisations ».
38
4. Automatiser les scripts PowerShell
Voyons maintenant comment créer des tâches planifiées à l’aide de scripts PowerShell et du planificateur de
tâches de Microsoft Windows.
Supposons que chaque jour à 10 heures, nous souhaitons exécuter un script PowerShell qui surveille les
modifications d’appartenance aux groupes dans un site Active Directory.
Dans Windows Powershell 2.0 (Windows 7, Windows Server 2008 R2), pour créer une tâche planifiée, vous
devez utiliser le module TaskScheduler. Installez le module en exécutant la commande Import-Module
TaskScheduler et utilisez le script suivant pour créer une tâche qui exécutera quotidiennement à 10 heures
le script PowerShell GroupMembershipChanges.ps1 :
Windows PowerShell 3.0 et 4.0 (Windows Server 2012 R2 et versions ultérieures) n’incluent pas le module
TaskScheduler, ce script ne fonctionnera donc pas. À la place, PowerShell 3.0 et 4.0 incluent de nouveaux
cmdlets pour créer des tâches planifiées, New-ScheduledTaskTrigger et Register-ScheduledTask, qui
rendent la création d’une tâche planifiée beaucoup plus facile et pratique. Nous allons donc créer une tâche
qui exécutera notre script quotidiennement à 10 heures avec le compte système (SYSTEM), qui dispose de
privilèges élevés.
39
Voici d’autres options de déclenchement qui peuvent être utiles pour créer de nouvelles tâches :
-Once — Déclenche votre tâche une fois. Vous pouvez définir un intervalle de répétition à l’aide du
paramètre -RepetitionInterval.
-Weekly — Déclenche votre tâche une fois par semaine.
Notez qu’il n’est pas possible de déclencher l’exécution « sur un événement » en utilisant ces cmdlets ; les
scripts PowerShell avec des déclencheurs « sur un événement » sont beaucoup plus compliqués. Il est
cependant possible de le faire avec le planificateur de tâches, ce qui constitue un réel inconvénient de
PowerShell par rapport au planificateur de tâches.
Pour créer une tâche, ouvrez le planificateur de tâches en appuyant sur les touches Windows+R puis en
tapant taskschd.msc dans la fenêtre qui s’ouvre. Ensuite, procédez comme suit :
1. Cliquez sur Créer une tâche et entrez un nom et une description pour la nouvelle tâche. Pour exécuter le
programme avec des privilèges d’administrateur, cochez la case Exécuter avec les privilèges les plus
élevés. Dans notre exemple, nous allons affecter un compte de service à l’exécution de la tâche, et exécuter
celle-ci que l’utilisateur soit connecté ou non.
40
2. Sélectionnez l’onglet Déclencheurs et cliquez sur le bouton Nouveau.... Vous pouvez ici spécifier les
conditions qui déclenchent l’exécution de la tâche. Vous pouvez par exemple choisir une exécution à une
date/heure donnée, à l’ouverture de session, en veille, au démarrage ou lorsqu’un événement particulier se
produit. Nous souhaitons que notre tâche soit déclenchée par toute nouvelle installation de logiciel, nous
choisissons donc Sur un événement dans le menu déroulant et sélectionnons Application dans le menu
déroulant du journal. Laissez le paramètre Source vide et entrez « 11707 » comme ID d’événement.
Cliquez sur OK pour enregistrer les modifications.
41
3. Ouvrez l’onglet Actions et cliquez sur Nouveau.... Ici, vous pouvez spécifier les actions à exécuter lorsque
les conditions de déclenchement sont remplies. Par exemple, vous pouvez envoyer un e-mail ou afficher un
message. Dans notre cas, nous voulons lancer un programme. Vous pouvez trouver le script ici ; il enverra
une alerte avec les détails de l’événement à propos du logiciel installé.
Program\script — powershell
42
4. L’onglet Conditions vous permet de spécifier les conditions qui, avec le déclencheur, détermineront si la
tâche doit être exécutée. Dans notre cas, nous laissons les paramètres par défaut dans cet onglet.
5. Vous pouvez définir des paramètres supplémentaires pour votre tâche planifiée dans l’onglet Paramètres.
Dans notre exemple, nous les laissons inchangés.
43
6. Une fois la tâche programmée, le système va vous demander le mot de passe du compte de service.
Remarquez que ce compte doit disposer du droit « Se connecter en tant que traitement par lot ». Entrez le
mot de passe et cliquez sur OK pour enregistrer la tâche.
7. Pour que le planificateur de tâches fonctionne correctement, le service planificateur de travaux doit être
configuré pour démarrer automatiquement. Exécutez Services.msc. Dans la liste des services, trouvez le
planificateur de tâches et double-cliquez dessus. Dans l’onglet Général, choisissez le type de démarrage «
Automatique » et cliquez sur OK pour enregistrer votre modification.
Désormais, chaque fois qu’un nouveau logiciel sera installé sur votre Microsoft Windows Server, vous serez
averti par e-mail de l’heure de l’installation, du nom du logiciel et de l’ID utilisateur (SID) de la personne qui
l’a installé.
Pour modifier une tâche existante, cliquez avec le bouton droit de la souris dans la liste, sélectionnez
Propriétés, modifiez les paramètres requis et cliquez sur OK. Pour supprimer une tâche planifiée, cliquez
avec le bouton droit de la souris, sélectionnez Supprimer et confirmez l’action.
44
Final Word
Résumons rapidement les points clés de ce didacticiel Windows PowerShell. Vous connaissez à présent les
bases de la rédaction de scripts PowerShell, comment exécuter les tâches les plus courantes de gestion d’Active
Directory et des systèmes de fichiers à l’aide de PowerShell, et comment planifier les scripts PowerShell. Vous
pouvez également consulter les scripts PowerShell suivants, qui permettent aux professionnels de
l’informatique d’effectuer des tâches spécifiques :
Comment rappeler aux utilisateurs de modifier leurs mots de passe avant qu'ils n'expirent
Vous pouvez aussi approfondir vos connaissances sur PowerShell en consultant les ressources suivantes :
45
Simplifiez-vous la vie avec
les 7 meilleurs outils gratuits pour
les professionnels de l’informatique
Sélectionnés et recommandés en toute indépendance par des experts du secteur, ces
outils s’avèrent indispensables pour les professionnels de l’informatique. Auditez Active
Directory et vos serveurs de fichiers, remédiez aux verrouillages de comptes, trouvez les
comptes périmés et plus encore, tout cela gratuitement.
Fondée en 2006, Netwrix a obtenu plus de 140 distinctions sectorielles et a été sélectionnée dans les listes
Inc. 5000 et Deloitte Technology Fast 500, qui recensent les entreprises à la croissance la plus rapide aux
États-Unis.
Siège social :
300 Spectrum Center Drive, Suite 200, Irvine, CA 92618, États-Unis
Tél : +33 9 75 18 11 19 N° gratuit : 1-888-638-9749 EMEA : +44 (0) 203-588-3023 netwrix.com/social