Question Création compte AD en graphique..erreur embêtante

Plus d'informations
il y a 15 ans 2 mois #9060 par TEST
Bonjour à tous,

Nouveau sur ce forum (que je consulte malgré tout assez souvent), je suis confronté aujourd'hui à un souci qui pourtant avoir tout essayé n'est pas résolu à ce jour.

Je viens donc chercher de l'aide ici :)

Pour résumer le besoin, je veux créer une petite interface graphique qui va permettre de créer un compte dans active directory.
Pour la création du compte je demande le login du compte référent, les nom, prénom, login, description et date de fin de contrat (si CDD)du nouveau compte.
Jusque là ça va, et dans mon script je voulais introduire un petit bout qui va récupérer les groupes auxquels appartient le compte utilisateur référent et mettre dans ces groupes mon nouveau compte et c'est là que ça bloque..
J'ai sans cesse une erreur me disant que le serveur ne veut pas traiter la requête et je ne vois absolument pas quoi faire..
Ce qui est étrange c'est qu'en testant le bout de code qui fait ça à part ça fonctionne très bien..

Je vous colle mon code (je débute donc il y aura peut être des choses qui vous paraîtront illogique dedans..je suis ouvert à toute critique donc n'hésitez pas :))
[code:1]###########################################################################
################ Creation des utilisateurs Active Directory ###############
############################### Version 0.2 ###############################

[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\")
Add-PSSnapin \"Quest.ActiveRoles.ADManagement\"

##################### Code pour Active Directory ########################
#
$domaineSMTP = \"@TEST.FR\"
$domaineLDAP = \"DC=TEST,DC=FR\"
$OU = 'OU=Utilisateurs,OU=Utilisateurs,OU=TEST'
$objOU = [ADSI]\"LDAP://$OU,$domaineLDAP\"


########################## Code pour le Forms #############################
#
#Je créer mes objets de forms
#
$Creer = New-Object System.Windows.Forms.Button
$Groupe = New-Object System.Windows.Forms.Button
$lbl_Loginreferent = new-object System.Windows.Forms.Label
$txtBoxLoginreferent = new-object System.Windows.Forms.TextBox
$lbl_prenom = new-object System.Windows.Forms.Label
$txtBoxPrenom = new-object System.Windows.Forms.TextBox
$lbl_nom = new-object System.Windows.Forms.Label
$txtBoxNom = new-object System.Windows.Forms.TextBox
$lbl_Description = new-object System.Windows.Forms.Label
$txtBoxDescription = new-object System.Windows.Forms.TextBox
$lbl_datecdd1 = new-object System.Windows.Forms.Label
$lbl_datecdd2 = new-object System.Windows.Forms.Label
$txtBoxdatecdd = new-object System.Windows.Forms.TextBox
$lbl_nouveau = new-object System.Windows.Forms.Label
$lbl_Loginnouveau = new-object System.Windows.Forms.Label
$txtBoxLoginnouveau = new-object System.Windows.Forms.TextBox
#
#
# Creer
#
$Creer.Text = \"Creer\"
$Creer.Location = New-Object System.Drawing.Size(253, 210)
$Creer.Size = New-Object System.Drawing.Size(90,30)
# Groupe
#
$Groupe.Text = \"Ajouter au groupe\"
$Groupe.Location = New-Object System.Drawing.Size(433, 210)
$Groupe.Size = New-Object System.Drawing.Size(90,30)
#
# lbl_Login
#
$lbl_Loginreferent.AutoSize = $true
$lbl_Loginreferent.Location = new-object System.Drawing.Point(38, 47)
$lbl_Loginreferent.Name = \"lbl_Loginreferent\"
$lbl_Loginreferent.Size = new-object System.Drawing.Size(21, 13)
$lbl_Loginreferent.TabIndex = 1
$lbl_Loginreferent.Text = \"Login référent :\"
#
# txtBoxLogin
#
$txtBoxLoginreferent.Location = new-object System.Drawing.Point(119, 44)
$txtBoxLoginreferent.Name = \"txtBoxLoginreferent\"
$txtBoxLoginreferent.Size = new-object System.Drawing.Size(100, 20)
$txtBoxLoginreferent.TabIndex = 2
#
# lbl_prenom
#
$lbl_prenom.AutoSize = $true
$lbl_prenom.Location = new-object System.Drawing.Point(56, 106)
$lbl_prenom.Name = \"lbl_prenom\"
$lbl_prenom.Size = new-object System.Drawing.Size(49, 13)
$lbl_prenom.TabIndex = 3
$lbl_prenom.Text = \"Prénom :\"
#
# txtBoxPrenom
#
$txtBoxPrenom.Location = new-object System.Drawing.Point(119, 104)
$txtBoxPrenom.Name = \"txtBoxPrenom\"
$txtBoxPrenom.Size = new-object System.Drawing.Size(100, 20)
$txtBoxPrenom.TabIndex = 4
#
# lbl_nom
#
$lbl_nom.AutoSize = $true
$lbl_nom.Location = new-object System.Drawing.Point(236, 106)
$lbl_nom.Name = \"lbl_nom\"
$lbl_nom.Size = new-object System.Drawing.Size(32, 13)
$lbl_nom.TabIndex = 5
$lbl_nom.Text = \"Nom :\"
#
# txtBoxNom
#
$txtBoxNom.Location = new-object System.Drawing.Point(273, 104)
$txtBoxNom.Name = \"txtBoxNom\"
$txtBoxNom.Size = new-object System.Drawing.Size(100, 20)
$txtBoxNom.TabIndex = 6
#
# lbl_Description
#
$lbl_Description.AutoSize = $true
$lbl_Description.Location = new-object System.Drawing.Point(39, 135)
$lbl_Description.Name = \"lbl_Description\"
$lbl_Description.Size = new-object System.Drawing.Size(66, 13)
$lbl_Description.TabIndex = 7
$lbl_Description.Text = \"Description :\"
#
# txtBoxDescription
#
$txtBoxDescription.Location = new-object System.Drawing.Point(119, 132)
$txtBoxDescription.Name = \"txtBoxDescription\"
$txtBoxDescription.Size = new-object System.Drawing.Size(407, 20)
$txtBoxDescription.TabIndex = 8
#
# lbl_nouveau
#
$lbl_nouveau.AutoSize = $true
$lbl_nouveau.Location = new-object System.Drawing.Point(195, 75)
$lbl_nouveau.Name = \"lbl_nouveau\"
$lbl_nouveau.Size = new-object System.Drawing.Size(21, 13)
$lbl_nouveau.TabIndex = 9
$lbl_nouveau.Text = \"INFORMATIONS NOUVEL UTILISATEUR\"
#
# lbl_datecdd1
#
$lbl_datecdd1.AutoSize = $true
$lbl_datecdd1.Location = new-object System.Drawing.Point(39, 160)
$lbl_datecdd1.Name = \"lbl_datecdd1\"
$lbl_datecdd1.Size = new-object System.Drawing.Size(60, 20)
$lbl_datecdd1.TabIndex = 10
$lbl_datecdd1.Text = \"Date de fin de contrat (JJ/MM/AAAA) :\"
#
# txtBoxdatecdd
#
$txtBoxdatecdd.Location = new-object System.Drawing.Point(235, 158)
$txtBoxdatecdd.Name = \"txtBoxdatecdd\"
$txtBoxdatecdd.Size = new-object System.Drawing.Size(90, 20)
$txtBoxdatecdd.TabIndex = 11
#
# lbl_datecdd2
#
$lbl_datecdd2.AutoSize = $true
$lbl_datecdd2.Location = new-object System.Drawing.Point(330, 160)
$lbl_datecdd2.Name = \"lbl_datecdd2\"
$lbl_datecdd2.Size = new-object System.Drawing.Size(60, 20)
$lbl_datecdd2.TabIndex = 12
$lbl_datecdd2.Text = \"(Ne rien mettre si CDI)\"
#
# lbl_Loginnouveau
#
$lbl_Loginnouveau.AutoSize = $true
$lbl_Loginnouveau.Location = new-object System.Drawing.Point(383, 106)
$lbl_Loginnouveau.Name = \"lbl_Loginnouveau\"
$lbl_Loginnouveau.Size = new-object System.Drawing.Size(30, 13)
$lbl_Loginnouveau.TabIndex = 13
$lbl_Loginnouveau.Text = \"Login :\"
#
# txtBoxLoginnouveau
#
$txtBoxLoginnouveau.Location = new-object System.Drawing.Point(426, 104)
$txtBoxLoginnouveau.Name = \"txtBoxLoginnouveau\"
$txtBoxLoginnouveau.Size = new-object System.Drawing.Size(100, 20)
$txtBoxLoginnouveau.TabIndex = 14


#
# Gestions pour Creer un utilisateurs
#
$Creer.Add_Click(
{
[bool]$OK = $false
[bool]$password = $true

#Variable pour récupérer la saisie des TexTBox
[string]$login_referent = $txtBoxLoginreferent.get_text()
[string]$Prenom = $txtBoxPrenom.get_text()
[string]$Nom = $txtBoxNom.get_text()
[string]$Description = $txtBoxDescription.get_text()
[string]$login_nouveau = $txtboxloginnouveau.get_text()
[string]$date_cdd = $txtboxdatecdd.get_text()

[string]$userCN=\"CN=$($Prenom) $($Nom)\"


if($login_referent -eq '')
{
$txtBoxLoginreferent.set_text('login du référent?')
}
elseif($Prenom -eq '')
{
$txtBoxPrenom.set_text('Veuillez saisir un prénom')
}
elseif($Nom -eq '')
{
$txtBoxNom.set_text('Veuillez saisir un nom')
}
elseif($login_nouveau -eq '')
{
$txtBoxLoginnouveau.set_text('login du nouveau?')
}
else{$OK = $true}

if ($OK -eq $true)
{


#Créer l'utilisateur dans l'AD

$objUser= $objOU.Create(\"user\",$userCN)
$objUser.put(\"sAMAccountName\", $login_nouveau)
$objUser.put(\"userPrincipalName\", $login_nouveau+$domaineSMTP)
$objUser.put('givenName', $Prenom)
$objUser.put('sn', $Nom)
$objUser.put('displayname', $Prenom+\" \"+$Nom)


if($Description -ne '')
{
$objUser.put('Description', $Description)
}

$objUser.SetInfo()
$objUser.SetPassword('aaaaaa')
#Permet d'activer le compte
$objUser.userAccountControl[0] = $objUser.userAccountControl[0] -band (-bnot 2)
$objUser.SetInfo()

get-qaduser | where-object -filter {$_.samaccountname -like $login_nouveau} | set-qaduser -usermustchangepassword $password

if($date_cdd -ne '')
{
$date_saisie = $date_cdd+\" 23:50:00\"
get-qaduser | where-object -filter {$_.samaccountname -like $login_nouveau} | set-qaduser -accountexpires $date_saisie
}


#Remise à zéro des champs
#$txtBoxLoginreferent.set_text('')
#$txtBoxLoginnouveau.set_text('')
#$txtBoxDescription.set_text('')
#$txtBoxNom.set_text('')
#$txtBoxPrenom.set_text('')
#$txtboxdatecdd.set_text('')
}

}
) ############################################ fin de \"creer\"

$Groupe.Add_Click(
{
[bool]$OK = $false


#Variable pour récupérer la saisie des TexTBox
[string]$login_referent = $txtBoxLoginreferent.get_text()
[string]$Prenom = $txtBoxPrenom.get_text()
[string]$Nom = $txtBoxNom.get_text()
[string]$login_nouveau = $txtboxloginnouveau.get_text()
[string]$userCN=\"CN=$($Prenom) $($Nom)\"


if($login_referent -eq '')
{
$txtBoxLoginreferent.set_text('login du référent?')
}
elseif($Prenom -eq '')
{
$txtBoxPrenom.set_text('Veuillez saisir un prénom')
}
elseif($Nom -eq '')
{
$txtBoxNom.set_text('Veuillez saisir un nom')
}
elseif($login_nouveau -eq '')
{
$txtBoxLoginnouveau.set_text('login du nouveau?')
}
else{$OK = $true}

if ($OK -eq $true)
{

$view = `
@{Label=\"Group\";`
Expression={$_.properties.name}}, `
@{Label=\"Member\";`
Expression={$_.properties.member -contains $user.distinguishedname}}

$cn_referent = get-qaduser | where-object -filter { $_.samaccountname -like $login_referent }

$user=[ADSI]\"LDAP://cn=$($cn_referent.name),OU=Utilisateurs,OU=Utilisateurs,OU=TEST,DC=TEST,DC=FR\"
$user
$searcher=[adsisearcher]\"(objectclass=group)\"
$searcher.searchroot=\"LDAP://DC=TEST,DC=FR\"
$searcher.findall() | Format-Table $view -a >> c:\groupe.txt

Gci \"c:\groupe.Txt\"|
Foreach {$CurrentFile=$_;$_}|
Get-Content|
Select-String -Pattern \"true\" |
Set-Content \"c:\resultat_groupe.txt\"

foreach ($i in (get-content \"c:\resultat_groupe.txt\"))
{$msg = $i
$msg -replace 'true','' >> c:\groupe_revu.txt
}

foreach ($i in (get-content \"c:\groupe_revu.txt\"))
{$msg = $i
$msg -replace ' ','' >> c:\groupe_revu2.txt
}

#remove-item c:\resultat_groupe.txt
#remove-item c:\groupe_revu.txt

foreach ($i in (get-content \"c:\groupe_revu2.txt\"))
{
write-host $i
$groupe = ([ADSI]\"LDAP://dc01/CN=$($i),OU=Groupes de Sécurité,OU=Groupes,OU=TEST,DC=TEST,DC=FR\")
write-host $groupe
$utilisateur = \"CN=\"+$userCN+\",OU=Utilisateurs,OU=Utilisateurs,OU=TEST,DC=TEST,DC=FR\"
write-host $utilisateur
$groupe.member += $utilisateur
$groupe.psbase.commitchanges()
}

remove-item c:\groupe.txt

#Remise à zéro des champs
#$txtBoxLoginreferent.set_text('')
#$txtBoxLoginnouveau.set_text('')
#$txtBoxDescription.set_text('')
#$txtBoxNom.set_text('')
#$txtBoxPrenom.set_text('')
#$txtboxdatecdd.set_text('')
}

}
)


#
#Je dessine mon forms
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.ClientSize = new-object System.Drawing.Size(576, 250)
$Form1.Controls.Add($txtBoxDescription)
$Form1.Controls.Add($lbl_Description)
$Form1.Controls.Add($txtBoxNom)
$Form1.Controls.Add($lbl_nom)
$Form1.Controls.Add($txtBoxPrenom)
$Form1.Controls.Add($lbl_prenom)
$Form1.Controls.Add($txtBoxLoginreferent)
$Form1.Controls.Add($lbl_Loginreferent)
$Form1.Controls.Add($Creer)
$Form1.Controls.Add($Groupe)
$Form1.Controls.Add($lbl_nouveau)
$Form1.Controls.Add($lbl_datecdd1)
$Form1.Controls.Add($lbl_datecdd2)
$Form1.Controls.Add($txtBoxdatecdd)
$Form1.Controls.Add($txtBoxLoginnouveau)
$Form1.Controls.Add($lbl_Loginnouveau)
$Form1.Name = \"Form1\"
$Form1.Text = \"Ajout nouvel utilisateur\"
$Form1.ShowDialog()[/code:1]

Je vous remercie par avance pour l'aide que vous m'apporterez :)<br><br>Message édité par: benoit27, à: 3/03/11 17:17

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

Plus d'informations
il y a 15 ans 2 mois #9063 par xyz
Salut,
benoit27 écrit:

Ce qui est étrange c'est qu'en testant le bout de code qui fait ça à part ça fonctionne très bien..

Peut-être que ta construction d'appel est erronée dans la Winform...
Utilise Write-Debug pour vérifier la syntaxe de la commande.
Si toutefois elle est identique peux-tu nous la communiquer ?

Sinon coté script, pour :
[code:1][string]$date_cdd = $txtboxdatecdd.get_text()[/code:1]
Tu peux utiliser directement le membre Text et pas l'accesseur :
[code:1]
[string]$date_cdd = $txtboxdatecdd.Text[/code:1]
De plus, l'ajout du type [string] est optionnel.

Pour:
[code:1]if($login_referent -eq '')[/code:1]
La convention suivante est préférable :
[code:1]if($login_referent -eq [string]:Empty)[/code:1]
La saisie est plus long, mais on évite les possibles coquilles (' ').

Toujours par convention, tu peux aussi indenter les segments de pipelines de la manière suivantes :
[code:1] get-qaduser |
where-object -filter {$_.samaccountname -like $login_nouveau} |
set-qaduser -usermustchangepassword $password[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 3/03/11 20:13

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 2 mois #9069 par Richard Lazaro
Bonjour,

Pour contribuer un peu à tout cela, personellement j'utiliserais plutôt :

[code:1]if([string]::IsNullOrEmpty($login_referent)){ ... }[/code:1]

Cela rajoute aussi la vérification si la variable contient $null, voir on peut encore améliorer cela avec :

[code:1]if([string]::IsNullOrEmpty($login_referent.Trim())){ ... }[/code:1]

La fonction Trim() supprime tout les espaces avant et après. Cela évite que un petit malin remplisse le champ avec uniquement des espace.

Bien Cordialement,

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 15 ans 2 mois #9072 par TEST
Merci à vous deux pour vos réponses.

J'ai finalement trouvé mon erreur...

Celle-ci venait de :
[code:1]$user=[ADSI]\&quot;LDAP://cn=$($cn_referent.name),OU=Utilisateurs,OU=Utilisateurs,OU=TEST,DC=TEST,DC=FR\&quot;[/code:1]

C'était le \&quot;cn=\&quot; qui était en trop..ça fonctionne parfaitement maintenant :)

Je vais néanmoins le corriger avec vos propositions afin d'avoir quelque chose de plus propre et plus conventionnel.

Je vous remercie bien en tout cas :)

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

Plus d'informations
il y a 15 ans 2 mois #9079 par xyz
Richard Lazaro écrit:

voir on peut encore améliorer cela avec :

[code:1]if([string]::IsNullOrEmpty($login_referent.Trim())){ ... }[/code:1]

Oui tout à fait, mais cela reste, comme tu le dis implicitement, lié au comportement des composants Winform/WPF :
Richard Lazaro écrit:

Cela évite que un petit malin remplisse le champ avec uniquement des espace.

Car dans la console, si la variable $login_referent contient $null, dans ce cas l'appel à Trim échoue.<br><br>Message édité par: Laurent Dardenne, à: 4/03/11 22:07

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 2 mois #9084 par Richard Lazaro
Oui, j'y ai pensé juste après le posting.
ont peut alors caster en [string] mais alors la vérification du null est inutile.

Donc peut être que la solution la plus logique serait :

[code:1]if(([string]$login_referent).Trim() -eq [string]:Empty) { ... }[/code:1]

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

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