' ------------------------------------------------------------ ' Script VBS de définition de mot de passe ' Ne peut être exécuté que par un administrateur ' ' JC BELLAMY © 2003 ' ' Syntaxe : ' setpwd /m /u /p ' setpwd -m -u -p ' : nom NetBIOS de l'ordinateur concerné ' si absent => machine locale ' : nom du compte utilisateur ' si absent => utilisateur courant ' : mot de passe à définir ' ------------------------------------------------------------ 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 nbargs=0 or testarg("?") or testarg("h") Then msg= "Script VBS de définition de mot de passe" & VBCRLF msg=msg & "Ne peut être exécuté que par un administrateur" & VBCRLF & VBCRLF msg=msg & "JC BELLAMY © 2003" & VBCRLF msg=msg & "------------------------------------------" & VBCRLF msg=msg & "Syntaxe : " & VBCRLF msg=msg & " setpwd /m /u /p" & VBCRLF msg=msg & " setpwd -m -u -p" & 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 & " : mot de passe à définir" & 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("p") then wscript.echo "Mot de passe absent" wscript.quit End If Password=getarg("p") 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 = GetObject("WinNT://" & computer & "/" & User & ",User") If Err.Number<>0 Then Erreur "GetObject" ObjUser.SetPassword Password If Err.Number<>0 Then Erreur "SetPassword" 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 msg="Erreur! La définition 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 '--------------------------------------------------------------------