Question Gestion d'exception

Plus d'informations
il y a 11 ans 1 mois #19064 par Dupuis
Gestion d'exception a été créé par Dupuis
Bonjour à tous je viens demander votre aide car je rencontre quelques difficultés pour gérer des exception dans mon script

Contexte: Je dois renseigner le champ adresse de messagerie pour chaque utilisateur de mon AD depuis un fichier CSV exporter d'un serveur mail Lotus.

Forme du fichier CSV:
[code:1]NOM PRENOM MAIL
DUS Jean Claude Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.[/code:1]

et voici mon script:

[code:1]import-module activedirectory

#Specify the OU you want to search for inactive accounts
$SearchOU=\"OU=CB,dc=lulu,dc=priv\"

$Fichier=Import-CSV C:\Users\test\Desktop\test.csv –Delimiter “;”

foreach($User in $Fichier){

$Nom = $user.nom
$Prenom = $user.prenom
$Mail = $user.mail

$Sam=Get-Aduser -Filter {Surname -eq $Nom -and Givenname -eq $Prenom} -SearchBase $SearchOU | select SamAccountname,Surname,GivenName

Set-ADUser $Sam.SamAccountName -EmailAddress $Mail
}[/code:1]

Ce script semble tourner correctement, malheureusement quand un utilisateur n'a pas de mail renseigné dans le fichier CSV j'obtiens le message d'erreur suivant:
[code:1]Set-ADUser : replace
+ Set-ADUser <<<< $Sam.SamAccountName -EmailAddress $Mail
+ CategoryInfo : InvalidOperation: (rdus:ADUser) [Set-ADUser], ADInvalidOperationException
+ FullyQualifiedErrorId : replace,Microsoft.ActiveDirectory.Management.Commands.SetADUser[/code:1]

Ou si l'utilisateur n'existe pas dans l'AD:

[code:1]Set-ADUser : Impossible de valider l'argument sur le paramètre « Identity ». L'argument est null. Indiquez un argument non-null et réessayez.
Set-ADUser <<<< $Sam.SamAccountName -EmailAddress $Mail
+ CategoryInfo : InvalidData: (:«») [Set-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser[/code:1]

J'aimerai pouvoir facilement récupérer dans un fichier ses erreurs sous forme:
Nom utilisateur adresse mail non renseignée
Nom utilisateur compte AD inexistant

Je voulais le faire avec des conditions
if ($mail -eq \"\") alors je renvois mail non renseigné

mais je ne parviens pas a faire l'imbrication correctement

j'ai essayé avec try catch mais je ne parviens pas a récupérer mes exception.

J’espère avoir été suffisamment claire merci d'avance

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #19065 par Philippe
Réponse de Philippe sur le sujet Re:Gestion d'exception
salut stabz

si tu cherche sur ce site, il y a quelque jour KaAzZ01 a eu un probleme proche dans ce sujet : Soucis de modifications Set-ADuser

ci dessous le code qui peut t'aider :
[code:1]Import-Module ActiveDirectory

$OU = \"OU=BO,OU=TEST,DC=domaine,DC=lan\"
$Path = \"C:\\"
$compteExistant =[string[]](Get-ADUser -Filter *).SamAccountName
$pass = ConvertTo-SecureString -String \"Azerty01!\" -AsPlainText –Force #Convertit le mot de passe en châine sécurisée afin qu'il puisse être utilisé lors de la création
$users = Import-Csv -Encoding UTF8 -Path $Path\DomainUsers.csv

foreach ($User in $users) {
$Name = $User.name
$Firstname = $User.Firstname
$Lastname = $User.LastName
$Detailedname = $Firstname +\" \" + $Lastname
$logonName = $User.LogonName
$SAM = $User.SamAccountName
$upn = \"$SAM\" + \"@domaine.lan\" # Changer ce qui est entre guillemets par votre nom de domaine ex: \"@CA01.fr\"
$description = $User.Description
$company = $User.Company

if ($compteExistant -eq $SAM) {
Set-ADUser -Identity $SAM -GivenName $Firstname -Surname $Lastname -DisplayName $Detailedname -UserPrincipalName $logonName -Company $company -Description $description
}
else {
New-ADUser -Name $SAM -SamAccountName $SAM -GivenName $Firstname -Surname $Lastname -DisplayName $Detailedname -UserPrincipalName $logonName -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
}
}
[/code:1]
reviens vers nous si tu comprend pas

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #19067 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Gestion d'exception
stabz écrit:

J'aimerai pouvoir facilement récupérer dans un fichier ses erreurs sous forme:
Nom utilisateur adresse mail non renseignée
Nom utilisateur compte AD inexistant

Tu peux valider tes données avant un traitement à l'aide de cette fonction .

Une fois créée et testée les règles propres à ton entreprise tu peux les réutiliser. Si tu as un doute sur la gestion du versionning des règles, tu peux livrer un script AVEC ses règles sans créer de dépendances (règles communes à plusieurs scripts).

Cette approche permet d'alléger la gestion d'exception dans le script, car ainsi on part du principe que les données traitées sont toutes valides.<br><br>Message édité par: Laurent Dardenne, à: 17/02/15 13:21

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #19068 par Dupuis
Réponse de Dupuis sur le sujet Re:Gestion d'exception
Merci pour vos retours je vais regarder cela.

Même si l'utilisation me semble assez complexe à mettre en place je suis encore débutant ^^!

Me revoila, alors je m’étais déjà un peu inspiré du script de KaAzZ01

je me suis pour l'instant dépatouillé ainsi :

[code:1]import-module activedirectory

#Nettoyage du fichier log
clear-content c:\LogAddMail.txt
#Specify the OU you want to search for inactive accounts
$SearchOU=\&quot;OU=CB,dc=test,dc=priv\&quot;

$Fichier=Import-CSV C:\Users\test\Desktop\testdp.csv –Delimiter “;”

foreach($User in $Fichier){
$Nom = $user.nom
$Prenom = $user.prenom
$Mail = $user.mail

#On recherche un utilisateur à partir du nom et prenom fournit dans le CSV et on récupère son SamAccountname
$Sam=Get-Aduser -Filter {Surname -eq $Nom -and Givenname -eq $Prenom} -SearchBase $SearchOU | select SamAccountname,Surname,GivenName

#Verification
if($Sam -eq $null -and $Mail -eq \&quot;\&quot;«»){ \&quot;Pas de compte AD et Mail absent : $User\&quot; | out-file c:\LogAddMail.txt -Append }
elseif($Sam -eq $null){ \&quot;Pas de compte AD: $User\&quot; | out-file c:\LogAddMail.txt -Append}
elseif($Mail -eq \&quot;\&quot;«»){\&quot;Mail absent dans le fichier CSV: $User\&quot; | out-file c:\LogAddMail.txt -Append}

else{Set-ADUser $Sam.SamAccountName -EmailAddress $Mail}

}[/code:1]

C'est peut être pas très propre mais semble fonctionner si vous avez des remarques je prends car je cherche à m’améliorer malheureusement il est pas toujours évident de trouver des sujets à traiter en powershell ^^!

Message édité par: stabz, à: 17/02/15 15:00<br><br>Message édité par: stabz, à: 18/02/15 10:07

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #19069 par Philippe
Réponse de Philippe sur le sujet Re:Gestion d'exception

C'est peut être pas très propre mais semble fonctionner si vous avez des remarques je prends

J'aurais pas mieux fait ! ;)

je cherche à m’améliorer malheureusement il est pas toujours évident de trouver des sujets à traiter en powershell ^^!

Débutant mais déjà une l'analyse d'un code d'un autre et son adaptation à tes besoins ! bon boulot ! B)

peut être une mise en forme avec indentation et quelques espace entre les commandes pourrais aidé à la lecture !? et plus des commentaires aussi.
mais chacun fait comme il veut :[code:1]
import-module activedirectory

# Nettoyage du fichier log
clear-content c:\LogAddMail.txt

# Specifie l'OU ou commence la recherche dans l'AD
$SearchOU = \&quot;OU=CB,dc=ciffreobona,dc=priv\&quot;

# Lecture du fichier avec les emails
$Fichier = Import-CSV C:\Users\pdupuis\Desktop\testdp.csv –Delimiter “;”

# parcours du fichier
foreach ($User in $Fichier) {
$Nom = $user.nom
$Prenom = $user.prenom
$Mail = $user.mail

# On recherche un utilisateur à partir du nom et prenom fournit dans le CSV et on récupère son SamAccountname
$Sam = Get-Aduser -Filter {Surname -eq $Nom -and Givenname -eq $Prenom} -SearchBase $SearchOU | select SamAccountname,Surname,GivenName

# Verification si l'utilisateur est present dans l'AD et le mail saisie dans le fichier
if ($Sam -eq $null -and $Mail -eq \&quot;\&quot;«») {
\&quot;Pas de compte AD et Mail absent : $User\&quot; | out-file c:\LogAddMail.txt -Append
}
elseif ($Sam -eq $null) {
\&quot;Pas de compte AD : $User\&quot; | out-file c:\LogAddMail.txt -Append
}
elseif ($Mail -eq \&quot;\&quot;«») {
\&quot;Mail absent dans le fichier CSV : $User\&quot; | out-file c:\LogAddMail.txt -Append
}
else {
Set-ADUser $Sam.SamAccountName -EmailAddress $Mail
}
}
[/code:1]

Par contre comme nous dirais Laurent : si le nombre d'utilisateurs dans le fichier et la fréquence d'utilisation est important, tu pourrais optimisé du coté du Get-ADUser comme avec KaAzZ01 pour ne pas trop sollicité le serveur AD

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #19070 par Philippe
Réponse de Philippe sur le sujet Re:Gestion d'exception
peut être un détail mais :

pour évité les problèmes dû aux homonymes, essai d'utilisé le SamAccountName plutôt que le nom et prénom pour get-aduser et donc aussi dans le fichier CSV

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena