Table des matières
Power Shell
Exercices Windows Server Chapitre 2
Questions 1 à 4
- Tester le script donné dans le chapitre 2.
Votre script devra être commenté ! - Créer un script supprimant les utilisateurs créées à la question 1 (à partir du même fichier d’utilisateur)
Votre script devra être commenté ! - Modifier le script de la question 1 de façon à ce qu’il permettre l’envoi du nom du fichier d’utilisateur sous forme de paramètre.
Utiliser le nom actuel (import.csv) comme nom par défaut.
Votre script devra être commenté ! - Modifier le script de la question 2 de façon à ce qu’il permettre l’envoi du nom du fichier d’utilisateur sous forme de paramètre.
Utiliser le nom actuel (import.csv) comme nom par défaut.
Votre script devra être commenté !
- # script qui crée les utilisateurs d'un fichier csv donne en paramètre
- # par défaut utilise le fichier import.csv du dossier courant
- # l'option DeleteUsers (fausse par defaut) permet de supprimer les utilisateurs au lieu de les créer
- # l'option DeleteADOUs (fausse par defaut) permet de supprimer les AD OUs
- # cette option peut seulement être activée si l'option DeleteUsers est activée
- # (il faut d'abord que les utilisateurs aient été supprimés avant de supprimer les OUs)
- # l'option
param(
[parameter(Mandatory=$false)]
[string]$File = ".\import.csv",
[parameter(Mandatory=$false)]
[ValidateSet($true,$false)]
$DeleteUsers = $false,
[parameter(Mandatory=$false)]
[ValidateSet($true,$false)]
$DeleteADOUs = $false
)
Import-Module ActiveDirectory
Import-Module 'Microsoft.PowerShell.Security'
$users = Import-Csv -Delimiter ";" -Path $File
if (-Not $DeleteUsers -And $DeleteADOUs) {
write-host -foregroundcolor red "Les ADOUs ne peuvent être supprimées sans supprimer les utilisateurs"
}
if ($DeleteUsers) {
foreach ($user in $users) {
$login = $user.firstName + "." + $user.lastName
try {
Remove-ADUser -Identity $login -Confirm:$false
write-host -foregroundcolor green "Utilisateur supprimé : $login"
} catch {
write-host -foregroundcolor red "Utilisateur non supprimé : $login"
}
}
if ($DeleteADOUs) {
Get-ADOrganizationalUnit -Identity "OU=Paris,OU=Employés,DC=archi-2019,DC=local" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity "OU=Paris,OU=Employés,DC=archi-2019,DC=local" -Confirm:$false
Get-ADOrganizationalUnit -Identity "OU=Londres,OU=Employés,DC=archi-2019,DC=local" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity "OU=Londres,OU=Employés,DC=archi-2019,DC=local" -Confirm:$false
Get-ADOrganizationalUnit -Identity "OU=Berlin,OU=Employés,DC=archi-2019,DC=local" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity "OU=Berlin,OU=Employés,DC=archi-2019,DC=local" -Confirm:$false
Get-ADOrganizationalUnit -Identity "OU=Employés,DC=archi-2019,DC=local" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity "OU=Employés,DC=archi-2019,DC=local" -Confirm:$false
}
} else {
New-ADOrganizationalUnit -Name "Employés" -Path "DC=archi-2019,DC=local"
New-ADOrganizationalUnit -Name "Londres" -Path "OU=Employés,DC=archi-2019,DC=local"
New-ADOrganizationalUnit -Name "Paris" -Path "OU=Employés,DC=archi-2019,DC=local"
New-ADOrganizationalUnit -Name "Berlin" -Path "OU=Employés,DC=archi-2019,DC=local"
foreach ($user in $users){
$name = $user.firstName + " " + $user.lastName
$fname = $user.firstName
$lname = $user.lastName
$login = $user.firstName + "." + $user.lastName
$Uoffice = $user.office
$Upassword = $user.password
$dept = $user.department
switch($user.office){
"Paris" {$office = "OU=Paris,OU=Employés,DC=archi-2019,DC=local"}
"Berlin" {$office = "OU=Berlin,OU=Employés,DC=archi-2019,DC=local"}
"Londres" {$office = "OU=Londres,OU=Employés,DC=archi-2019,DC=local"}
default {$office = $null}
}
try {
New-ADUser -Name $name -SamAccountName $login -UserPrincipalName $login -DisplayName $name -GivenName $fname -Surname $lname -AccountPassword (ConvertTo-SecureString $Upassword -AsPlainText -Force) -City $Uoffice -Path $office -Department $dept -Enabled $true
echo "Utilisateur ajouté : $name"
} catch {
write-host -foregroundcolor red "Utilisateur non ajouté : $name"
}
}
}
.\create-users.ps1
Get-ADOrganizationalUnit
Get-ADUser
.\create-users.ps1
Get-ADOrganizationalUnit
Get-ADUser
.\create-users.ps1
Question 5
Créer un script qui lira le fichier csv passé en paramètre (nom par défaut : import.csv). Ce fichier sera au même format que import.csv.
Votre script créera un second fichier csv (à votre nom, passé en paramètre également) qui contiendra les mêmes données sauf le nom utilisateur qui sera préfixé des 3 premières lettres de votre nom.
ex : Kristina Chung deviendra Kristina DupChung si vous vous appelez Dupond
- 3 paramètres optionnels : le fichier à modifier, le nom du nouveau fichier et la string à ajouter au début du nom
param(
[parameter(Mandatory=$false)]
[string]$File = ".\import.csv",
[parameter(Mandatory=$false)]
[string]$Modif = "Bin",
[parameter(Mandatory=$false)]
[string]$NewFile = "import2"
)
($csv = Import-Csv -Delimiter ";" -Path $File) | ForEach-Object {
$_.lastName = $Modif + $_.lastName
}
$csv | Export-Csv "$NewFile.csv" -Delimiter ";"
lancement de la commande sans paramètres : le fichier import.csv est modifié avec “Bin” et enregistré dans import2.csv
.\new-csv.ps1 ls
cat .\import2.csv
lancement de la commande avec paramètres : le fichier import2.csv est modifié avec “La” et enregistré dans import3.csv
.\new-csv.ps1
cat .\import3.csv
Q3
Créer un script en POWERSHELL qui prend en paramètre obligatoire une variable “department”.
Votre script utilisera le fichier csv à votre nom de login situé dans votre répertoire personnel sur le serveur qui contient des lignes comme ceci : “firstName”;“lastName”;“office”;“password”;“department” (voir le fichier .csv à votre nom de login situé dans votre répertoire personnel sur le serveur)
Votre script créera des utilisateurs au nom de login “firstName.lastName” (où firstName et LastName prendront les valeurs des champs correspondants du fichier csv) et avec un mot de passe password (où password prendra la valeur du champ password du fichier csv) sur le domaine archi-2019.local en les attribuant à l’unité organisationnelle “Employes” et dans la sous-unité Londres, Paris ou Berlin suivant la valeur du champ “office” présent dans le fichier .csv pour chaque utilisateur et ce UNIQUEMENT lorsque le champ “department” du fichier .csv prendra la valeur de la variable “department” reçue en paramètre !
(NB : pour pouvoir tester votre script, n'oubliez pas de créer également un script qui efface les utilisateurs présents dans votre fichier .csv)
Voici un exemple de sortie de Q3 :
.\Q3.ps1 Accounting
Utilisateur ajoute : ThHALou Rosenthal, department Accounting
Utilisateur ajoute : ThHAChr Bowden, department Accounting
Utilisateur ajoute : ThHADar Barton, department Accounting
Utilisateur ajoute : ThHAHar Underwood, department Accounting
Utilisateur ajoute : ThHAWil Jones, department Accounting
…
Réponses :
- A. Donner le code de votre Script :
- B. Montrer que vos utilisateurs existent bien et qu’au moins un utilisateur peut se logger :
A. Donner le code de votre Script :
# script qui crée les utilisateurs d'un fichier csv placé dans le répertoire courant
# crée les utilisateurs du département donné en paramètre
# l'option Delete (fausse par défaut) permet de supprimer les utilisateurs au lieu de les créer
param(
# paramètre obligatoire : département pour lequel on souhaite créer les utilisateurs
[parameter(Mandatory=$true)]
[string]$Dept,
# paramètre facultatif pour les tests : permet de supprimer les utilisateurs
[parameter(Mandatory=$false)]
[ValidateSet($true,$false)]
$Delete = $false
)
# imports nécessaires à l'utilisation d'AD
Import-Module ActiveDirectory
Import-Module 'Microsoft.PowerShell.Security'
# import des utilisateurs du fichier csv dans la variable users
$users = Import-Csv -Delimiter ";" -Path .\LaBINACCHI.csv
if ($Delete) { # SUPPRESSION
# boucle sur tous les utilisateurs
foreach ($user in $users) {
# comparaison insensible à la casse
if ($user.department -eq $Dept) {
$login = $user.firstName + "." + $user.lastName
# suppression de l'utilisateur
try {
# supprime l'utilisateur sans demander de confirmation manuelle
Remove-ADUser -Identity $login -Confirm:$false
write-host -foregroundcolor green "Utilisateur supprimé : $login"
} catch {
write-host -foregroundcolor red "Utilisateur non supprimé : $login"
}
}
}
} else { # CREATION
foreach ($user in $users) {
# comparaison insensible à la casse
if ($user.department -eq $Dept) {
$name = $user.firstName + " " + $user.lastName
$fname = $user.firstName
$lname = $user.lastName
$login = $user.firstName + "." + $user.lastName
$Uoffice = $user.office
$Upassword = $user.password
$department = $user.department
# attribution des OU en fonction de la colonne office du csv
switch($user.office){
"Paris" {$office = "OU=Paris,OU=Employés,DC=archi-2019,DC=local"}
"Berlin" {$office = "OU=Berlin,OU=Employés,DC=archi-2019,DC=local"}
"Londres" {$office = "OU=Londres,OU=Employés,DC=archi-2019,DC=local"}
default {$office = $null}
}
try {
New-ADUser -Name $name -SamAccountName $login -UserPrincipalName $login -DisplayName $name -GivenName $fname -Surname $lname -AccountPassword (ConvertTo-SecureString $Upassword -AsPlainText -Force) -City $Uoffice -Path $office -Department $department -Enabled $true
write-host -foregroundcolor green "Utilisateur ajouté : $name (département $department)"
} catch {
write-host -foregroundcolor red "Utilisateur non ajouté : $name"
}
}
}
}
Création des utilisateurs du département “direction” :
.\create-users.ps1 -Dept direction
B. Montrer que vos utilisateurs existent bien et qu’au moins un utilisateur peut se logger :
Vérification de leur existence :
Get-ADUser -Filter 'Name -like "*LaBI*"'
Connection avec un utilisateur :
ssh LaBIKri.Chung@192.168.2.190
