' ------------------------------------------------------------ ' Script VBS de modification de mot de passe ' JC BELLAMY © 2002 ' ' Syntaxe : ' chgpwd /m /u /a /n ' chgpwd -m -u -a -n ' : nom NetBIOS de l'ordinateur concerné ' si absent => machine locale ' : nom du compte utilisateur ' si absent => utilisateur courant ' : ancien mot de passe ' : nouveau mot de passe ' ------------------------------------------------------------ Const SW_HIDE=0 Const SW_SHOWNORMAL=1 Dim net, user, computer, args, ObjNT, ObjUser, SAM, Item, fso, shell Set net = Wscript.CreateObject("WScript.Network") Set fso=WScript.CreateObject("Scripting.FileSystemObject") Set Shell=Wscript.CreateObject("WScript.Shell") Set args=Wscript.Arguments nbargs=args.count defmoteur="cscript" If testarg("?") or testarg("h") Then msg= "Script VBS de modification de mot de passe" & VBCRLF msg=msg & "JC BELLAMY © 2002" & VBCRLF msg=msg & "------------------------------------------" & VBCRLF msg=msg & "Syntaxe : " & VBCRLF msg=msg & " chgpwd /m /u /a /n" & VBCRLF msg=msg & " chgpwd -m -u -a -n" & VBCRLF msg=msg & " : nom NetBIOS de l'ordinateur concerné" & VBCRLF msg=msg & " si absent => machine locale" & VBCRLF msg=msg & " : nom du compte utilisateur" & VBCRLF msg=msg & " si absent => utilisateur courant" & VBCRLF msg=msg & " : ancien mot de passe" & VBCRLF msg=msg & " : nouveau mot de passe" & VBCRLF & VBCRLF msg=msg & "NB : les mots de passe sont sensibles à la casse (minuscules/majuscules)" & VBCRLF & VBCRLF wscript.echo msg wscript.quit End If ' Test du moteur utilisé Call TestHost(true) If testarg("m") Then computer=getarg("m") Else computer=net.ComputerName End If If testarg("u") Then user=getarg("u") Else user=net.UserName End If user=lcase(user) If not testarg("a") then wscript.echo "Ancien mot de passe absent" wscript.quit End If If not testarg("n") then wscript.echo "Nouveau mot de passe absent" wscript.quit End If OldPassword=getarg("a") NewPassword=getarg("n") If OldPassword=NewPassword Then wscript.echo "Erreur! Le nouveau mot de passe est égal à l'ancien" wscript.quit End If root="\\" & computer & "\c$" If not fso.FolderExists(root) Then wscript.echo "Erreur! L'ordinateur """ & computer & """ n'a pas été trouvé sur le réseau" wscript.quit End If OKuser=false set SAM=GetObject("WinNT://" & computer & ",computer") for each Item in SAM Classe=Item.Class If Classe = "User" and lcase(Item.name)=user Then OKuser=true exit for end if next If not OKuser Then wscript.echo "Erreur! """ & user & """ n'est pas un utilisateur de " & computer wscript.quit End If Set ObjNT = GetObject("WinNT:") on error resume next Set ObjUser = ObjNT.OpenDSObject("WinNT://" & computer & "/" & User, User, OldPassword, 1) If Err.Number<>0 Then Erreur "OpenDSObject" ObjUser.ChangePassword OldPassword, NewPassword If Err.Number<>0 Then Erreur "ChangePassword" wscript.echo "Le mot de passe de """ & user & """ sur """ & computer & """ a été correctement modifié!" wscript.quit '-------------------------------------------------------------------- Sub erreur(module) hexerr=Hex(Err.Number) desc=Err.Description If InStr(hexerr,"8007")>0 Then hexerr=eval("&H"& Right(hexerr,4)) If hexerr=1376 Then desc="Mot de passe initial incorrect" End If msg="Erreur! La modification du mot de passe de """ & user & """ n'a pas pu être effectuée" & VBCRLF msg=msg & "Fonction " & module & " - code " & hexerr & " : " & VBCRLF msg=msg & desc wscript.echo msg wscript.quit End Sub '-------------------------------------------------------------------- Function testarg(param) testarg=false For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then testarg=true exit function End If End If Next End Function '-------------------------------------------------------------------- Function getarg(param) getarg="" For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then getarg=mid(args(i),2+len(param)) exit function End If End If Next End Function '-------------------------------------------------------------------- ' Sous programme de test du moteur Sub TestHost(force) dim rep strappli=lcase(Wscript.ScriptFullName) strFullName =lcase(WScript.FullName) i=InStr(1,strFullName,".exe",1) j=InStrRev(strFullName,"\",i,1) strCommand=Mid(strFullName,j+1,i-j-1) if strCommand<>"cscript" then If force then Init="Ce script doit être lancé avec CSCRIPT" Else Init="Il est préférable de lancer ce script avec CSCRIPT" End If rep=MsgBox(Init & VBCRLF & _ "Cela peut être rendu permanent avec la commande" & VBCRLF & _ "cscript //H:CScript //S /Nologo" & VBCRLF & _ "Voulez-vous que ce soit fait automatiquement?", _ vbYesNo + vbQuestion,strappli) if rep=vbYes then nomcmd="setscript.bat" Set ficcmd = fso.CreateTextFile(nomcmd) ficcmd.writeline "@echo off" ficcmd.writeline "cscript //H:CScript //S /Nologo" ficcmd.writeline "pause" params="" For i = 0 To nbargs-1 params=params & " " & args(i) next ficcmd.writeline chr(34) & strappli & chr(34) & params ficcmd.writeline "pause" ficcmd.close shell.Run nomcmd, SW_SHOWNORMAL,true force=true end if If force then WScript.Quit end if end sub '--------------------------------------------------------------------