====== PowerShell ======
===== Avancé =====
Grâce aux [[fr:powershell:start|bases]], nous savons désormais:
* lire des fichiers CSV
* écrire des fichiers CSV avec de nouvelles colonnes
* effectuer un test sur une colonne comme le courriel
Maintenant, découvrons comment adresser des requêtes AD. Tout d'abord il faut installer un module requis.
# once per server
Install-Module ActiveDirectory
Repartons du même fichier d'entrée que celui des [[fr:powershell:start|bases]].
Samaccountname,Mail
abc123,abc123@domain.com
def123,def123@domain.com
ghi123,ghi123@test.com
Samaccountname,Mail
abc123,abc123@domain.com
def123,def123@domain.com
ghi123,ghi123@test.com
Before we tested mail addresses in an easy way : //does it end with "domain.com" ?//. New tests with AD queries, //Samaccountname must belong to an active user from AD and AD user mail must be equal to mail from CSV file//.
Dans un premier temps, on faisait un simple test : //est-ce que le courriel se termine par "domain.com" ?//. Maintenant, testons en se reposant sur l'AD, //on doit trouver un utilisateur AD actif avec ce Samaccountname et dont le courriel correspond à l'adresse fournie dans le CSV//.
Import-Module ActiveDirectory
Import-Csv -Path input.csv | foreach {
# save current object into different variable
$currentLine = $_
# deal with columns
$mail = $currentLine.Mail
$sam = $currentLine.Samaccountname
# let's query AD with SAM
try {
# we are using Get-AdUser with parameter -Identity
# in this case, expected result is either one AdUser or nothing
# if no result is found then Exception is thrown
# that's why we are in a try -- catch block
$user = Get-AdUser -Identity $sam -Properties mail
# if the script goes here
# then it means that one AD active user has been found
Write-Verbose ("AD active user found with SAM={0}" -f $sam)
$currentLine | Add-Member -MemberType NoteProperty -Name "AdActiveUser" -Value "yes"
# second test
# Do mails from AD and from CSV match ?
if ($user.mail -eq $mail) {
Write-Verbose ("{0}(AD) is equal to {1}(CSV): perfect match" -f $user.mail, $mail)
$currentLine | Add-Member -MemberType NoteProperty -Name "MailMatch" -Value "yes"
} else {
Write-Verbose ("{0}(AD) is NOT equal to {1}(CSV)" -f $user.mail, $mail)
$currentLine | Add-Member -MemberType NoteProperty -Name "MailMatch" -Value "no"
}
} catch {
# if the script goes here
# then it means that no AD active user has been found
Write-Verbose ("No AD active user found with SAM={0}" -f $sam)
$currentLine | Add-Member -MemberType NoteProperty -Name "AdActiveUser" -Value "no"
$currentLine | Add-Member -MemberType NoteProperty -Name "MailMatch" -Value "no"
}
# return updated currentLine with new column
$currentLine
} |
# export result line by line to CSV
# -NoTypeInformation prevents metadata from being exported
# -Encoding is specified because of the fact we are querying AD (UTF-8)
Export-Csv -Path preCheck.csv -NoTypeInformation -Encoding UTF-8
L'exécution du script va produire un fichier CSV avec deux nouvelles colonnes.
"Samaccountname","Mail","AdActiveUser","MailMatch"
"abc123","abc123@domain.com","yes","yes"
"def123","def123@domain.com","yes","no"
"ghi123","ghi123@test.com","no","no"
"Samaccountname","Mail","AdActiveUser","MailMatch"
"abc123","abc123@domain.com","yes","yes"
"def123","def123@domain.com","yes","no"
"ghi123","ghi123@test.com","no","no"