Script Powershell AD – Scanner et Ajouter

image002Mettre a jour le champ email

 

Aujourd’hui, je vous propose un script powershell assez simple que j’ai du mettre en place pour mettre à jour les champs email des comptes utilisateurs d’un active directory.

Il affiche un choix de menu que l’on peut aisément agrandir et adapter à d’autres traitements. Basé sur QAD et en admettant que vous avez les droits admin (sinon il faut faire un get-credential et le stocker dans une variable, vous pouvez facilement le modifier).

De plus, il vous permet de voir une structure composée de commandes imbriquées telles que do-until-switch-foreach-for assez astucieuse je trouve. Les logs sont générés pour être adapter a la structure mais on pourrait très bien le faire en try-catch pour mettre en place une gestion des erreurs si le script venait a grandir et effectuer d’autres traitements. Vous découvrirez également la notion de $tableau, bref que du bonheur 😀

 

Cls
 $log = "result.log"
 $scriptpath = get-location
 $date = get-date
 "*** Debut *** a $date" >> $log
$req = get-qaduser -searchroot 'votre domaine ici' -enabled | select samaccountname,mail,givenname,userprincipalname

$tableau = @()

[Int]$nbr = 0 | Out-Null
[Int]$nbr2 = 0 | out-null

do {
do {
Write-Host ""
Write-Host "A - Scanner et Ajouter les emails aux utilisateurs du domaine"
Write-Host "Q - Quitter"
Write-Host ""
write-host -nonewline "Entrer votre choix (A/Q) puis entrée : "
$choix = read-host
write-host ""
$ok = @("A","Q") -contains $choix
if ( -not $ok) { Write-Host "Choix pas disponible" -fore Red }
}
until ( $ok )
switch ( $choix ) {
"A" {
Write-Host "Vous avez choisi 'A'"
cls

foreach ($user in $req) {

write-host "***************" -BackgroundColor black -ForegroundColor White
write-host $user.samaccountname

if(Get-QADMemberOf $user.samaccountname -Indirect -Name Posh_ID){

# comptes non valide pour creation email

write-host "Compte de service trouvés" -foregroundcolor red
write-host "MAJ Email IGNOREE... $user" -foregroundcolor red
$nbr++

}else{

if($user.mail -eq $null){

# comptes valides on continue

write-host "Ce compte n'a pas d'email et va etre mis a jour" -ForegroundColor Yellow
set-aduser -identity $user.samaccountname -EmailAddress $user.UserPrincipalName
write-host "MAJ Email ... $user" -ForegroundColor Green
$nbr2++
"MAJ Email ... $user" >> $log

}
}
$tableau += $user
}

for ($count = 0; $count -le $tableau.Length; $count++){
$user = $tableau[$count]}
#cls
Write-host "Il y a $nbr comptes ignores" -ForegroundColor red
Write-host "Il y a $nbr2 comptes a modifier" -ForegroundColor Green
"Terminé ! Nbre comptes ignores $nbr et nombre comptes modifies $nbr2" >> $log
write-host "Terminé voir $scriptpath\$log" -ForegroundColor Green
# $tableau >> $log
"*** Fin *** a $date" >> $log
}
"Q" {
cls
Write-Host "Bye" -fore yellow
"Aucun changement effectue $date" >> $log
break
}
}
}
until ( $choix -eq "Q" )

Bon on va détailler tout ca et le réecrire car il ya eu une conversion malheureuse de plugin wordpress sur la syntaxe du code et vlan, patatra…