Avant d'exécuter un script
Exécute PowerShell avec les droits adaptés, lis les variables et teste d'abord sur une OU de laboratoire. Utilise
-WhatIf lorsque la cmdlet le permet.1. Ajouter un utilisateur Active Directory
param(
[Parameter(Mandatory)] [string]$Prenom,
[Parameter(Mandatory)] [string]$Nom,
[Parameter(Mandatory)] [string]$SamAccountName,
[string]$OU = "OU=Utilisateurs,DC=warx,DC=home",
[string]$Groupe = "GG_Utilisateurs"
)
Import-Module ActiveDirectory
$MotDePasse = Read-Host "Mot de passe temporaire" -AsSecureString
if (Get-ADUser -Filter "SamAccountName -eq '$SamAccountName'" -ErrorAction SilentlyContinue) {
Write-Warning "Le compte $SamAccountName existe déjà."
exit 1
}
New-ADUser `
-Name "$Prenom $Nom" `
-GivenName $Prenom `
-Surname $Nom `
-SamAccountName $SamAccountName `
-UserPrincipalName "$SamAccountName@warx.home" `
-Path $OU `
-AccountPassword $MotDePasse `
-Enabled $true `
-ChangePasswordAtLogon $true
Add-ADGroupMember -Identity $Groupe -Members $SamAccountName
Get-ADUser $SamAccountName -Properties MemberOf2. Créer des comptes AD depuis un CSV
CSV : Prenom;Nom;Login;OU;Groupe. Le mot de passe est demandé une seule fois ou peut être généré individuellement.
Import-Module ActiveDirectory
$Utilisateurs = Import-Csv .\utilisateurs.csv -Delimiter ';'
foreach ($Utilisateur in $Utilisateurs) {
if (Get-ADUser -Filter "SamAccountName -eq '$($Utilisateur.Login)'" -ErrorAction SilentlyContinue) {
Write-Warning "$($Utilisateur.Login) existe déjà"
continue
}
$MotDePasseClair = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 14 | ForEach-Object {[char]$_})
$MotDePasse = ConvertTo-SecureString $MotDePasseClair -AsPlainText -Force
New-ADUser -Name "$($Utilisateur.Prenom) $($Utilisateur.Nom)" `
-GivenName $Utilisateur.Prenom -Surname $Utilisateur.Nom `
-SamAccountName $Utilisateur.Login `
-UserPrincipalName "$($Utilisateur.Login)@warx.home" `
-Path $Utilisateur.OU -AccountPassword $MotDePasse `
-Enabled $true -ChangePasswordAtLogon $true
Add-ADGroupMember -Identity $Utilisateur.Groupe -Members $Utilisateur.Login
[PSCustomObject]@{ Login=$Utilisateur.Login; MotDePasseTemporaire=$MotDePasseClair }
} | Export-Csv .\mots-de-passe-temporaires.csv -NoTypeInformation -Delimiter ';'
Protège et supprime rapidement le CSV des mots de passe. En production, préfère un coffre-fort ou une remise individuelle sécurisée.
3. Tester plusieurs serveurs
$Serveurs = Get-Content .\serveurs.txt
foreach ($Serveur in $Serveurs) {
if (Test-Connection -ComputerName $Serveur -Count 1 -Quiet) {
Write-Host "[OK] $Serveur répond"
} else {
Write-Warning "[KO] $Serveur ne répond pas"
}
}4. Tester des ports réseau
$Tests = @(
@{Hote='dc01.warx.home'; Port=53},
@{Hote='dc01.warx.home'; Port=88},
@{Hote='dc01.warx.home'; Port=389},
@{Hote='filesrv.warx.home'; Port=445}
)
foreach ($Test in $Tests) {
$Resultat = Test-NetConnection -ComputerName $Test.Hote -Port $Test.Port -WarningAction SilentlyContinue
[PSCustomObject]@{
Hote = $Test.Hote
Port = $Test.Port
Accessible = $Resultat.TcpTestSucceeded
}
}5. Inventaire des postes AD
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties OperatingSystem,IPv4Address,LastLogonDate |
Select-Object Name,OperatingSystem,IPv4Address,LastLogonDate |
Sort-Object Name |
Export-Csv .\inventaire-postes.csv -NoTypeInformation -Encoding UTF86. Vérifier les services critiques
$Services = 'DNS','NTDS','KDC','Netlogon'
foreach ($Nom in $Services) {
$Service = Get-Service -Name $Nom -ErrorAction SilentlyContinue
if (-not $Service) {
Write-Warning "$Nom absent"
} elseif ($Service.Status -ne 'Running') {
Write-Warning "$Nom est $($Service.Status)"
Start-Service -Name $Nom
} else {
Write-Host "[OK] $Nom"
}
}7. Rapport réseau Windows
$Rapport = ".\rapport-reseau-$env:COMPUTERNAME-$(Get-Date -Format yyyyMMdd-HHmm).txt"
@(
"=== Configuration IP ==="
(Get-NetIPConfiguration | Format-List | Out-String)
"=== Routes ==="
(Get-NetRoute | Sort-Object DestinationPrefix | Format-Table | Out-String)
"=== DNS ==="
(Get-DnsClientServerAddress | Format-Table | Out-String)
"=== Connexions TCP ==="
(Get-NetTCPConnection | Format-Table | Out-String)
) | Set-Content $Rapport
Write-Host "Rapport créé : $Rapport"