Question
Gestion erreur (Get-ADUser )
- Dupont
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 48
- Remerciements reçus 0
il y a 11 ans 1 mois #18840
par Dupont
Gestion erreur (Get-ADUser ) a été créé par Dupont
Bonjour à tous ,
J'aimerais lors d'un script de création de users qui marche très bien d'ailleurs faire une sorte de gestion d'erreur , à savoir ne plus afficher le message d'erreur \"Le compte existe déjà\" en l'envoyant dans une variable nulle (je sais que c'est possible en shell) ou autrement
Voici le code :
[code:1]
Import-Module ActiveDirectory
#Répéter ligne 3 à 5 pour créer le nombre de groupes voulus
#$group = \"Groupe1\" # a changer
$OU = \"OU=Test,DC=TEST,DC=LO\"
#New-ADGroup -Name $group -GroupScope Global -Path $OU -Confirm
$comptesExistants = Get-ADUser -Filter * | select 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 C:\Projet2\DomainUsers.csv
$users | Get-Member
foreach ($User in $users)
{
#$OU = \"OU=Test,DC=TEST,DC=LO\" # chemin à changer pour mettre tous les utilisateurs dans une même OU
#$Description = $users.description
$Name = $User.name
$Firstname = $User.Firstname
$Lastname = $User.LastName
$Detailedname = $Firstname +\" \" + $Lastname
$logonName = $User.LogonName
#$FirstLetterFirstname = $UserFirstname.substring(0,1)
$SAM = $User.SamAccountName
$upn = \"$SAM\" + \"@TEST.LO\"
$description = $User.Description
$company = $User.Company
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
#Add-ADGroupMember -Identity $group -Members $SAM -Confirm
if ( $SAM -eq $comptesExistants ) # C'est ici que je bloque
{
Write-Host \"Des utilisateurs étaient déjà présents\"
}
}
[/code:1]
J'aimerais lors d'un script de création de users qui marche très bien d'ailleurs faire une sorte de gestion d'erreur , à savoir ne plus afficher le message d'erreur \"Le compte existe déjà\" en l'envoyant dans une variable nulle (je sais que c'est possible en shell) ou autrement
Voici le code :
[code:1]
Import-Module ActiveDirectory
#Répéter ligne 3 à 5 pour créer le nombre de groupes voulus
#$group = \"Groupe1\" # a changer
$OU = \"OU=Test,DC=TEST,DC=LO\"
#New-ADGroup -Name $group -GroupScope Global -Path $OU -Confirm
$comptesExistants = Get-ADUser -Filter * | select 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 C:\Projet2\DomainUsers.csv
$users | Get-Member
foreach ($User in $users)
{
#$OU = \"OU=Test,DC=TEST,DC=LO\" # chemin à changer pour mettre tous les utilisateurs dans une même OU
#$Description = $users.description
$Name = $User.name
$Firstname = $User.Firstname
$Lastname = $User.LastName
$Detailedname = $Firstname +\" \" + $Lastname
$logonName = $User.LogonName
#$FirstLetterFirstname = $UserFirstname.substring(0,1)
$SAM = $User.SamAccountName
$upn = \"$SAM\" + \"@TEST.LO\"
$description = $User.Description
$company = $User.Company
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
#Add-ADGroupMember -Identity $group -Members $SAM -Confirm
if ( $SAM -eq $comptesExistants ) # C'est ici que je bloque
{
Write-Host \"Des utilisateurs étaient déjà présents\"
}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 1 mois #18842
par Philippe
Réponse de Philippe sur le sujet Re:Gestion erreur (Get-ADUser )
salut KaAzZ01
si je comprend bien tu ne veux plus le message :
[code:1]New-ADUser : Le compte spécifié existe déjà
Au caractère Ligne:1 : 1
+ New-ADUser test |Out-Null
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (CN=test,CN=Users,DC=domaine,DC=lan:«»String) [New-ADUser], ADIdentityAlreadyExistsException
+ FullyQualifiedErrorId : Le compte spécifié existe déjà,Microsoft.ActiveDirectory.Management.Commands.NewADUser[/code:1]
c'est possible avec try catch mais si tu a une autre erreur que celle la tu le saura jamais sauf si tu gére les erreurs dans le catch, exemple :
[code:1]try {
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
}
catch {
}[/code:1]
si je comprend bien tu ne veux plus le message :
[code:1]New-ADUser : Le compte spécifié existe déjà
Au caractère Ligne:1 : 1
+ New-ADUser test |Out-Null
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (CN=test,CN=Users,DC=domaine,DC=lan:«»String) [New-ADUser], ADIdentityAlreadyExistsException
+ FullyQualifiedErrorId : Le compte spécifié existe déjà,Microsoft.ActiveDirectory.Management.Commands.NewADUser[/code:1]
c'est possible avec try catch mais si tu a une autre erreur que celle la tu le saura jamais sauf si tu gére les erreurs dans le catch, exemple :
[code:1]try {
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
}
catch {
}[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 1 mois #18843
par Philippe
Réponse de Philippe sur le sujet Re:Gestion erreur (Get-ADUser )
une autre façon plus \"propre\" est de testé avant le New-ADUser si l'utilisateur est présent :
[code:1]if (!(Get-ADUser -Filter {SamAccountName -eq $SAM})) {
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
}[/code:1]
à toi de choisir
[code:1]if (!(Get-ADUser -Filter {SamAccountName -eq $SAM})) {
New-ADUser -Name $Detailedname -SamAccountName $SAM -DisplayName $Detailedname -Company $company -Description $description -AccountPassword $pass -Enabled $true -ChangePasswordAtLogon $true -Path $OU
}[/code:1]
à toi de choisir
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 1 mois #18844
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Gestion erreur (Get-ADUser )
Salut,
6ratgus écrit:
Un exemple sous Office 365 :
[code:1]
...
} catch {
if ($_.Exception -is [Microsoft.Online.Administration.Automation.MicrosoftOnlineException])
{
#Connect-MsolService
if ($_.FullyQualifiedErrorId -match '^\s*Invalid Credentials')
{
#Connect-MsolService : The user name or password is incorrect. Verify your user name, and then type your password again.
#FullyQualifiedErrorId : 0x80048821,Microsoft.Online.Administration.Automation.ConnectMsolService
$Msg='101 : Impossible d''authentifier vos credentials sont invalides.'
}
elseif ($_.FullyQualifiedErrorId -match '^\s*0x80048821')
{
#Connect-MsolService : The user name or password is incorrect. Verify your user name, and then type your password again.
#FullyQualifiedErrorId : 0x80048821,Microsoft.Online.Administration.Automation.ConnectMsolService
$Msg='102 : Impossible d''authentifier vos credentials le nom d''utilisateur ou le mot de passe est erroné.'
}
#elseif ...
#Set-MsolUserPassword
elseif ($_.FullyQualifiedErrorId -match '^\s*Microsoft\.Online\.Administration\.Automation\.UserNotFoundException')
{
#utilisateur inconnu case Microsoft.Online.Administration.Automation.MicrosoftOnlineException: User Not Found.
#FullyQualifiedErrorId=Microsoft.Online.Administration.Automation.UserNotFoundException,Microsoft.Online.Administration.Automation.SetUserPassword
$Msg=\"202 : Le nom d''utilisateur ($($Request.Name)) est inconnu.\"
}
#...
Throw (new-object System.ApplicationException($Msg,$_.Exception))
[/code:1]
6ratgus écrit:
Certes, l'avantage est qu'il n'y a pas à coder de gestion d'erreur alambiquée, mais c'est sous réserve que Get-ADUser ne génère pas d'exception
On ne règle pas le problème (de la gestion d'erreur), mais on espère le retarder
6ratgus écrit:
Il faut étudier le type de l'exception, par exemple avec la fonction Resolve-erreur. Si c'est une erreur générique, l'analyse de la propriété CategoryInfo et/ou FullyQualifiedErrorId permettent de déterminer les différents cas.c'est possible avec try catch mais si tu a une autre erreur que celle la tu le saura jamais sauf si tu gére les erreurs dans le catch, exemple :
Un exemple sous Office 365 :
[code:1]
...
} catch {
if ($_.Exception -is [Microsoft.Online.Administration.Automation.MicrosoftOnlineException])
{
#Connect-MsolService
if ($_.FullyQualifiedErrorId -match '^\s*Invalid Credentials')
{
#Connect-MsolService : The user name or password is incorrect. Verify your user name, and then type your password again.
#FullyQualifiedErrorId : 0x80048821,Microsoft.Online.Administration.Automation.ConnectMsolService
$Msg='101 : Impossible d''authentifier vos credentials sont invalides.'
}
elseif ($_.FullyQualifiedErrorId -match '^\s*0x80048821')
{
#Connect-MsolService : The user name or password is incorrect. Verify your user name, and then type your password again.
#FullyQualifiedErrorId : 0x80048821,Microsoft.Online.Administration.Automation.ConnectMsolService
$Msg='102 : Impossible d''authentifier vos credentials le nom d''utilisateur ou le mot de passe est erroné.'
}
#elseif ...
#Set-MsolUserPassword
elseif ($_.FullyQualifiedErrorId -match '^\s*Microsoft\.Online\.Administration\.Automation\.UserNotFoundException')
{
#utilisateur inconnu case Microsoft.Online.Administration.Automation.MicrosoftOnlineException: User Not Found.
#FullyQualifiedErrorId=Microsoft.Online.Administration.Automation.UserNotFoundException,Microsoft.Online.Administration.Automation.SetUserPassword
$Msg=\"202 : Le nom d''utilisateur ($($Request.Name)) est inconnu.\"
}
#...
Throw (new-object System.ApplicationException($Msg,$_.Exception))
[/code:1]
6ratgus écrit:
Cela dépend du contexte, si tu crées plusieurs centaines d'utilisateurs un seul appel me semble préférable.une autre façon plus \"propre\" est de testé avant le New-ADUser si l'utilisateur est présent :
Certes, l'avantage est qu'il n'y a pas à coder de gestion d'erreur alambiquée, mais c'est sous réserve que Get-ADUser ne génère pas d'exception
On ne règle pas le problème (de la gestion d'erreur), mais on espère le retarder
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Dupont
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 48
- Remerciements reçus 0
il y a 11 ans 1 mois #18845
par Dupont
Réponse de Dupont sur le sujet Re:Gestion erreur (Get-ADUser )
Oui c'est bien ça 6ragtus , mais je comprends pas bien le try catch , je comprends le fonctionnement mais j'ai aucune idée de ce qu'il faut renseigner , le type d'exception ou je ne sais quoi ?
Si vous avez quelques explications ou liens utiles je prends !
Merci à vous
Si vous avez quelques explications ou liens utiles je prends !
Merci à vous
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 1 mois #18848
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Gestion erreur (Get-ADUser )
KaAzZ01 écrit:
Un tutoriel sur la gestion d'erreur .Si vous avez quelques explications ou liens utiles je prends !
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.091 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Gestion erreur (Get-ADUser )