Question [Concours Scripting] reset-password (validé)
- belkhamsa
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 16 ans 6 mois #1172
par belkhamsa
[Concours Scripting] reset-password (validé) a été créé 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 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
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 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.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
il y a 16 ans 6 mois #1175
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:[Concours Scripting] reset-password
Merci Fares pour ce script (et quel script ! ). Nous le testerons et t'attribuerons tes points en conséquence.
Arnaud
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 ?
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 16 ans 6 mois #1188
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:[Concours Scripting] reset-password
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 \"system.diagnostic\" 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 \"system.windows.forms\" 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
Je n'ai pas testé, mais je me permets juste une remarque sur le chargement des assemblies en début de script:
L'assembly \"system.diagnostic\" 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 \"system.windows.forms\" 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.
- belkhamsa
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 16 ans 5 mois #1224
par belkhamsa
Réponse de belkhamsa sur le sujet Re:[Concours Scripting] reset-password
Merci beaucoup pour tous ces conseils.
Fares;)
Fares;)
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 16 ans 4 mois #1369
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:[Concours Scripting] reset-password
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.078 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- [Concours Scripting] reset-password (validé)