Question [Concours Scripting] reset-password (validé)

Plus d'informations
il y a 14 ans 11 mois #1172 par belkhamsa
bonjour,

ce script permet à l'aide d'un interface graphique de verifier l'existance d'un utilisateur dans l'AD (avec son UPN) et de changer son mot de passe.




[code:1]##################################################################################################
## reset-password.ps1
## version 0.1
## date : 17/10/2007
## auteur : BELKHAMSA Fares
#################################################################################################

#importing files
[System.Reflection.Assembly]::LoadWithPartialName(\"System.windows.forms\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.drawing\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.diagnostic\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.ToolStripRenderMode\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.ToolStripLayoutstyle\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.DockStyle\"«»)
##################################################################################################
##################################################################################################

# Forms declaration

$form = new-object windows.forms.form
$form.backcolor = \"white\"
$form.text = \"Change Password\"
$form.clientsize = new-object drawing.size @(450,233)
$form.maximumsize =new-object drawing.size @(460,253)
$form.minimumsize =new-object drawing.size @(460,253)
$form.maximizebox = $false
$form.helpbutton = $true

$form.Backcolor = \"lightgray\"

#####################################\"
#label user principla name
$labeluser = new-object system.windows.FOrms.label
$labeluser.text = \"user principal name :\"
$labeluser.size = new-object drawing.point(150,20)
$labeluser.location = new-object drawing.point(10,10)
$labeluser.backcolor = \"transparent\"
$labeluser.forecolor = \"blue\"
$labeluser.font = new-object system.drawing.font(\"Arial\",\"10\",\"bold\"«»)
$form.controls.add($labeluser)
#textbox user principal name
$boxuser = new-object windows.fOrms.textbox
$boxuser.size = \"150,20\"
$boxuser.text = \"\"
$boxuser.location = new-object drawing.point(190,10)
$form.controls.add($boxuser)
#button check user
$btnchuser = new-object System.Windows.Forms.Button
$btnchuser.Size = \"50,20\"
$btnchuser.text = \"&check\"
$btnchuser.backcolor = \"buttonface\"
$btnchuser.location = new-object Drawing.point(350,10)
$form.acceptbutton = $btnchuser
$form.controls.add($btnchuser)
$btnchuser.add_click({
if($boxuser.text -ne \"\" -and $boxuser.text -ne $null){
$upn = $boxuser.text
$globaluser = get-user
$exist = $false
foreach ($user in $globaluser){
if($user.userprincipalname -eq $upn){
$dn = $user.distinguishedname
$exist = $true
$boxnewpass.enabled = $true
$boxconfirmpass.enabled = $true
$btnchok.enabled = $true
$labelnewpass.enabled = $true
$labelconfirmpass.enabled = $true
$form.acceptbutton = $btnchok
}
}
if($exist -eq $false){
$err = \"this user does not exist: \" + $upn + \"`n `n Please Enter a valid UPN\"
[Windows.Forms.MessageBox]:: Show( $err,\"Error \", [Windows.Forms.MessageBoxButtons]::Ok,[Windows.Forms.MessageBoxIcon]::hand)
}
}else{
[Windows.Forms.MessageBox]:: Show( \"Please Enter a valid UPN\",\"Error \", [Windows.Forms.MessageBoxButtons]::Ok,[Windows.Forms.MessageBoxIcon]::hand)
}
})


#############################################################
#label new pass word
$labelnewpass = new-object system.windows.FOrms.label
$labelnewpass.text = \"new password:\"
$labelnewpass.size = new-object drawing.point(150,20)
$labelnewpass.location = new-object drawing.point(10,70)
$labelnewpass.backcolor = \"transparent\"
$labelnewpass.forecolor = \"blue\"
$labelnewpass.font = new-object system.drawing.font(\"Arial\",\"10\",\"bold\"«»)
$labelnewpass.enabled = $false
$form.controls.add($labelnewpass)
#textbox new password
$boxnewpass = new-object windows.fOrms.textbox
$boxnewpass.size = \"150,20\"
$boxnewpass.text = \"\"
$boxnewpass.passwordchar = \"*\"
$boxnewpass.location = new-object drawing.point(190,70)
$boxnewpass.enabled = $false
$form.controls.add($boxnewpass)

#label confirm pass word
$labelconfirmpass = new-object system.windows.FOrms.label
$labelconfirmpass.text = \"confirm new password:\"
$labelconfirmpass.size = new-object drawing.point(170,20)
$labelconfirmpass.location = new-object drawing.point(10,100)
$labelconfirmpass.backcolor = \"transparent\"
$labelconfirmpass.forecolor = \"blue\"
$labelconfirmpass.font = new-object system.drawing.font(\"Arial\",\"10\",\"bold\"«»)
$labelconfirmpass.enabled = $false
$form.controls.add($labelconfirmpass)
#textbox confirm password
$boxconfirmpass = new-object windows.fOrms.textbox
$boxconfirmpass.size = \"150,20\"
$boxconfirmpass.text = \"\"
$boxconfirmpass.passwordchar = \"*\"
$boxconfirmpass.location = new-object drawing.point(190,100)
$boxconfirmpass.enabled = $false
$form.controls.add($boxconfirmpass)
#button condition csv file
$btnchok = new-object System.Windows.Forms.Button
$btnchok.Size = \"80,30\"
$btnchok.text = \"&Reset Password\"
$btnchok.backcolor = \"buttonface\"
$btnchok.location = new-object Drawing.point(350,80)
$btnchok.enabled = $false
$form.controls.add($btnchok)
$btnchok.add_click({
if($boxnewpass.text -ne \"\" -and $boxnewpass.text -ne $null){
if ($boxnewpass.text -eq $boxconfirmpass.text){

############ rechercher l'utilisateur dans 'Users' ##########\"
$root=[ADSI]''
$usr = $root.psbase.get_Children().Find(\"CN=Users\"«»)
$NewUser = $usr.psbase.get_Children() | where {$_.distinguishedname -eq $dn}
########### modifier le mot de passe
$NewUser.psbase.Invoke(\"SetPassword\",$boxnewpass.text)
$NewUser.psbase.InvokeSet(\"AccountDisabled\",$false)
$NewUser.psbase.CommitChanges()

[Windows.Forms.MessageBox]:: Show( \"The password has benn successfully changed\",\"Success changement\", [Windows.Forms.MessageBoxButtons]::Ok,[Windows.Forms.MessageBoxIcon]::information)
$form.controls.add($btnclose)
$form.controls.add($btnother)
}else{
[Windows.Forms.MessageBox]:: Show( \"the new and the confirm password are not the same\",\"wrong confirmation\", [Windows.Forms.MessageBoxButtons]::Ok,[Windows.Forms.MessageBoxIcon]::hand)
$boxnewpass.resettext()
$boxconfirmpass.resettext()
}
}else{
[Windows.Forms.MessageBox]:: Show( \"the new password box can not be empty\",\"Error\", [Windows.Forms.MessageBoxButtons]::Ok,[Windows.Forms.MessageBoxIcon]::hand)
$boxconfirmpass.resettext()
}


})

# button other changement
$btnother = new-object System.Windows.Forms.Button
$btnother.Size = \"120,30\"
$btnother.text = \"&other changement\"
$btnother.backcolor = \"buttonface\"
$btnother.location = new-object Drawing.point(205,190)
$btnother.add_click({
$boxuser.text = \"\"
$boxnewpass.text = \"\"
$boxconfirmpass.text = \"\"
$boxnewpass.enabled = $false
$boxconfirmpass.enabled = $false
$btnchok.enabled = $false
$labelnewpass.enabled = $false
$labelconfirmpass.enabled = $false
$form.acceptbutton = $btnchuser
$form.controls.remove($btnclose)
$form.controls.remove($btnother)

})

# button close
$btnclose = new-object System.Windows.Forms.Button
$btnclose.Size = \"80,30\"
$btnclose.text = \"&close\"
$btnclose.backcolor = \"buttonface\"
$btnclose.location = new-object Drawing.point(330,190)
$btnclose.add_click({
$form.close()
})

#afficher l'interface
$Form.Add_Shown({$form.Activate()})
[void]$form.showdialog() [/code:1]


toujours le même probleme avec les smileys :S il faut enlever les espaces dans (:: Show)

ce script donne une idée encore une fois sur la côté graphique de Powershell et aussi quelques opérations dans l'AD

Fares<br><br>Message édité par: robin, à: 18/12/07 09:23

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

Plus d'informations
il y a 14 ans 11 mois #1175 par Arnaud Petitjean
Merci Fares pour ce script (et quel script ! :silly: ). Nous le testerons et t'attribuerons tes points en conséquence.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

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

Plus d'informations
il y a 14 ans 11 mois #1188 par Jacques Barathon
Hello,

Je n'ai pas testé, mais je me permets juste une remarque sur le chargement des assemblies en début de script:

L'assembly \&quot;system.diagnostic\&quot; n'existe pas. Tu voulais peut-être te référer à System.Diagnostics (avec un 's' à la fin). Cet espace de noms est automatiquement chargé par PowerShell. Tu peux donc supprimer la ligne.

Egalement, lorsque tu charges l'assembly \&quot;system.windows.forms\&quot; tu charges en même temps toutes les classes dérivées. Les assemblies system.windows.forms.* que tu charges à la suite n'existent d'ailleurs pas, tu peux supprimer ces lignes.

Pour savoir s'il faut déclarer une assembly ou pas pour une classe donnée, regarde dans la documentation MSDN à quelle assembly appartient une classe ou une énumération particulière. Par exemple, pour System.Windows.Forms.DockStyle:

msdn2.microsoft.com/fr-fr/library/system...ockstyle(VS.80).aspx

La page dit:

Assembly: system.windows.forms

Il suffit donc d'avoir chargé system.windows.forms pour avoir accès à DockStyle.

Quant à System.Diagnostics, si tu regardes la page MSDN d'une classe qu'il fournit (par exemple System.Diagnostics.Process), tu verras que l'assembly est System, assembly de base chargée en standard.

Pour finir, tu peux voir quelles assemblies sont chargées à tout moment en tapant:

[AppDomain]::CurrentDomain.GetAssemblies()

Voir le script search-type que j'avais posté dans les contributions il y a peu de temps.

Janel

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

Plus d'informations
il y a 14 ans 11 mois #1224 par belkhamsa
Merci beaucoup pour tous ces conseils.

Fares;)

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

Plus d'informations
il y a 14 ans 9 mois #1369 par Robin Lemesle
Après les remarques de janel, Script Validé :)

Robin MVP PowerShell

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

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