Question
Condition If "Si"
- Ludovic
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 2 ans 2 mois #31197
par Ludovic
Condition If "Si" a été créé par Ludovic
Bonjour étant novice dans ce language je cherche a comprendre comment cela fonctionne et espère trouver de l'aide auprès de vous.
Prenons l'exemple de ce code avec try et catch
Ma question est comment faire pour avoir :
1: Si "If" le user est créé = message "l'utilisateur a bien été créée"
2: Sinon "Else" = message" Attention l'utilisateur n'a pas été créé)
Merci d'avance pour vos retours
Cordialement.
Prenons l'exemple de ce code avec try et catch
try
{New-ADUser -Name $Username -Givenname $prénom -Surname $nom etc.....}
catch
{Write-warning "ERREUR lle user n'a pas été créé"}
Write-Output "Exécution terminée"
Ma question est comment faire pour avoir :
1: Si "If" le user est créé = message "l'utilisateur a bien été créée"
2: Sinon "Else" = message" Attention l'utilisateur n'a pas été créé)
Merci d'avance pour vos retours
Cordialement.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6294
- Remerciements reçus 67
il y a 2 ans 2 mois #31199
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Condition If "Si"
Salut,
cette construction est similaire à un if/else mais uniquement lors d'une erreur.Ceci dit en cas de doublon, ce code ne renvoit pas un message adapté,"Erreur lors d'une demande de création pour '$Username'.".
Et le comportement dépend de la variable $ErrorActionPreference.
La construction if/else ne fonctionne que si l'appel réussie tjr et renvoi tjr un résultat que l'on peut interpréter. Ici (New-ADUser) on peut avoir un résultat ou une exception.
cette construction est similaire à un if/else mais uniquement lors d'une erreur.
try
{
New-ADUser -Name $Username -Givenname $prénom -Surname $nom etc.....
Write-Host "l'utilisateur '$Username' a bien été créé."
}
catch
{
Write-warning "L'utilisateur '$Username' n'a pas été créé."
}
Write-Host "Exécution terminée"
Et le comportement dépend de la variable $ErrorActionPreference.
La construction if/else ne fonctionne que si l'appel réussie tjr et renvoi tjr un résultat que l'on peut interpréter. Ici (New-ADUser) on peut avoir un résultat ou une exception.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Ludovic
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 2 ans 2 mois #31200
par Ludovic
Réponse de Ludovic sur le sujet Condition If "Si"
Merci de votre réponse.
Je voudrais aller plus loin dans ma démarcheJe voudrais que si le mot de passe rentré ne respecte pas les spécifications de microsoft (longueur;caractères,etc) ça me mette un message d'erreur et surtout que ça arrête le script car il y a d'autres commande à suivre
Merci d'avance%.
Je voudrais aller plus loin dans ma démarche
try
{
#Ajout d'un nouvel utilisateur dans l'AD
New-ADUser -Name $nomcomplet -GivenName $prénom -Surname $nom -SamAccountName $login -UserPrincipalName $login"@acme.fr" -Path "OU=$OU,DC=acme,DC=fr" [u]-AccountPassword(Read-Host -AsSecureString "Input Password")[/u] -ChangePasswordAtLogon $true -Enabled $true}
catch
{Write-Warning "ERREUR Le mot de passe ne correspond pas aux valeurs de sécurité"
}
Merci d'avance%.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6294
- Remerciements reçus 67
il y a 2 ans 2 mois #31201
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Condition If "Si"
>>Je voudrais que si le mot de passe rentré ne respecte pas les spécifications de microsoft (longueur;caractères,etc) ça me mette un message d'erreur
Dans ce cas il faut analyser le détail de l'exception que le cmdlet renvoie pour ce cas, ensuite tu gères l'exception spécifique différemment ou un champ de l'objet exception ou encore le champ FullyQualifiedErrorId.
Là c'est de la gestion d'erreur.
Voir stackoverflow.com/questions/18136962/how...rrorid-in-powershell
Un exemple ( en cours de dev) autour d'une fonction utilisant une API :
Dans ce cas il faut analyser le détail de l'exception que le cmdlet renvoie pour ce cas, ensuite tu gères l'exception spécifique différemment ou un champ de l'objet exception ou encore le champ FullyQualifiedErrorId.
Là c'est de la gestion d'erreur.
Voir stackoverflow.com/questions/18136962/how...rrorid-in-powershell
Un exemple ( en cours de dev) autour d'une fonction utilisant une API :
function Test-Credential{
#L'appel répété de cette fonction sur un même compte avec un mot de passe faux, peut le verrouiller.
#La syntaxe Domain\sAMAccountName décompte une tentative d'authentification, Domain@sAMAccountName en décompte 2.
#
#note :
# Symptoms : When attempting to create or modify an Active Directory object,
# you receive the error: "Exception from HRESULT: 0x80005008".
#
#Cause : The error 0x80005008 (ADS_BAD_PARAMETER) can occur when one of the properties has an invalid value.
# Typically, this is returned from a COM object when setting properties in an external system such as
# Remote Desktop (Terminal) Services.
# exemple avec $s='t'
# $result=Test-Credential -credentials $credential -MachineName $s #inconnue
# $result=Test-Credential -credentials $credential -MachineName $s$result -> longueur incorrecte pour un nom de machine
#
#MACHINE
# upn : Comptetest@UC1234
# samaccountname: UC1234\Comptetest
#DOMAIN
# upn : Comptetest2@truc.bidule
# samaccountname: Comptetest2\Dom-test
#todo password expired
[CmdletBinding(DefaultParameterSetName = 'Domain')]
Param (
[ValidateNotNull()]
[System.Management.Automation.PSCredential]$Credentials,
[Parameter(Mandatory=$true,parametersetname='Domain')]
[ValidateNotNull()]
[string] $DomainName,
[Parameter(Mandatory=$true,parametersetname='Machine')]
[ValidateNotNull()]
[String] $MachineName,
#Indicates that the cmdlet returns a Boolean value (True or False), instead of a 'CredentialValidation' object.
#The value is True if the credential are valid; otherwise the value is False.
[switch] $Quiet
)
try {
$ContextType=$PsCmdlet.ParameterSetName -as [System.DirectoryServices.AccountManagement.ContextType]
if ($ContextType -eq 'Domain')
{ $Name=$DomainName }
else
{ $Name=$MachineName }
$nc = $Credentials.GetNetworkCredential()
#TODO : cette version ne tient pas compte de la cohérence des états
#par exemple on peut avoir IsAccountActivated=$true et isUserExist=$false
$Param=@{
ContextName=$Name;
Type="$ContextType";
UserName=$nc.UserName;
isValid=$false;
isUserExist=$false;
isAccountLockedOut=$false;
IsAccountActivated=$true;
Exception=$null
ConnectedServer=$null
reason=$null
}
$CredentialValidation=New-CredentialValidation @Param
try {
#Note :
# Si un nom de machine n'existe pas l'appel réussit et renvoi un objet
# Si un nom de domaine n'existe pas ou n'est pas joinable l'appel échoue
$pctx = New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ContextType, $Name)
$CredentialValidation.ContextName=$pctx.Name
$CredentialValidation.ConnectedServer=$pctx.ConnectedServer
} catch [System.DirectoryServices.AccountManagement.PrincipalServerDownException]
{
#Mauvais domaine ou injoignable : Impossible de contacter le serveur.
#InnerException.hresult=0x80070035
$CredentialValidation.Exception=$_.Exception
$CredentialValidation.Reason=$_.Exception.InnerException.Message
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
try {
$UserInfos=[System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($pctx, $nc.UserName)
} catch [System.Runtime.InteropServices.COMException] {
if ($_.Exception.ErrorCode -ne 0x80070035)
{throw $_}
#Le chemin réseau n'a pas été trouvé.
$CredentialValidation.Exception=$_.Exception
$Message=$_.Exception.Message -replace "\.`r`n$"," : '$Name'"
$CredentialValidation.Reason=$Message
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
#On teste les cas pour informer l'utilisateur sinon on doit interpréter les exceptions déclenchées
#On laisse les exceptions pour les cas inconnus.
$isUserExistInContext=$null -ne $UserInfos
$CredentialValidation.isUserExist=$isUserExistInContext
if ($isUserExistInContext -eq $false)
{
$ErrorMessage="The specified account '{0}' does not exist into the $($PsCmdlet.ParameterSetName.toLower()) '{1}'." -F $nc.UserName, $pctx.Name
$CredentialValidation.Reason=$ErrorMessage
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
$CredentialValidation.IsAccountActivated=$UserInfos.Enabled
if ($UserInfos.Enabled -eq $false)
{
$ErrorMessage= "The account '{0}\{1}' is disabled." -F $pctx.Name,$nc.UserName
$CredentialValidation.Reason=$ErrorMessage
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
if ($UserInfos.IsAccountLockedOut())
{
$ErrorMessage= "The account '{0}\{1}' is locked out." -F $pctx.Name,$nc.UserName
$CredentialValidation.Reason=$ErrorMessage
$CredentialValidation.isAccountLockedOut=$true
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
#Saisie des Credentials correct, mais sont-ils valides ?
#Faux : Nom de domain et nom de compte correct mais mot de passe incorrect
try {
# Les cas d'erreur : compte locké et compte désactivé sont gérés auparavant
$CredentialValidation.isValid =$pctx.ValidateCredentials($nc.UserName, $nc.Password)
if ( $CredentialValidation.isValid -eq $false)
{
$ErrorMessage= "The user '{0}' exists but the password entered seems incorrect." -f $nc.UserName
$CredentialValidation.Reason=$ErrorMessage
}
} catch [System.Management.Automation.MethodInvocationException]
{
$CredentialValidation.isValid =$false
if ($_.Exception.InnerException -is [System.DirectoryServices.AccountManagement.PrincipalOperationException])
{
#Nom de machine inconnue ou injoignable : Le chemin réseau n'a pas été trouvé.
#InnerException.hresult=0x80131501
$CredentialValidation.Reason=$_.Exception
$CredentialValidation.Reason=$_.Exception.InnerException.Message
if ($Quiet)
{ return $false }
else
{ return $CredentialValidation }
}
Throw $_
}
if ($Quiet)
{ return $CredentialValidation.isValid }
else
{ return $CredentialValidation }
}
finally
{
if ($null -ne $UserInfos)
{ $UserInfos.Dispose() }
if ($null -ne $pctx)
{ $pctx.Dispose() }
}
}
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Ludovic
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 2 ans 2 mois #31203
par Ludovic
Réponse de Ludovic sur le sujet Condition If "Si"
heu comment dire a part que ça pique les yeux.
Je n'ai rien compris
Je n'ai rien compris
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 169
- Remerciements reçus 35
il y a 2 ans 1 mois #31222
par ericlm128
Réponse de ericlm128 sur le sujet Condition If "Si"
Tu peut commencer par lire la doc du try/catch, ca pourrait t'aider dans la compréhension de son fonctionnement.
docs.microsoft.com/fr-fr/powershell/modu...?view=powershell-7.1
docs.microsoft.com/fr-fr/powershell/modu...?view=powershell-7.1
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.054 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Condition If "Si"