1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
   | ' ----------------------------------------------------------
' Script de modification du mot de passe d'un compte donné
' sur toutes les machines d'un domaine ou workgroup
' Syntaxe:
'	chgallpwd [/d<domain>] /u<utilisateur> /a<ancien> /n<nouveau> 
'		<domain>      : nom du domaine ou workgroup concerné
'	                    si ce nom est omis, on prend le domaine
'                       de la machine locale
'       <utilisateur> : nom du compte utilisateur
'	                    si absent => utilisateur courant
'		<ancien>      : ancien mot de passe
'		<nouveau>     : nouveau mot de passe	
'
' JC BELLAMY © 2002
' ----------------------------------------------------------
Const SW_HIDE=0
Const SW_SHOWNORMAL=1 
Dim net,shell,computer, args, fso,oWinnt, oDomain, oDomainItem, SAM
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 Syntaxe ""
' Test du moteur utilisé
Call TestHost(true)
 
If testarg("u") Then
	user=getarg("u")
Else
	user=net.UserName
	End If
user=lcase(user)
 
If not testarg("a") then Syntaxe "Ancien mot de passe absent"
If not testarg("n") then Syntaxe "Nouveau mot de passe absent"
 
OldPassword=getarg("a")
NewPassword=getarg("n")
If OldPassword=NewPassword Then Syntaxe "Le nouveau mot de passe est égal à l'ancien"
 
domain=""
If testarg("d") Then domain=getarg("d")
If domain="" Then
	Set ComputerSystem = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("Win32_ComputerSystem")
	for each ComputerItem in ComputerSystem
	    domain=ComputerItem.Domain
		next
	End If
 
Wscript.echo "Modification de mot de passe sur les ordinateurs du domaine " & domain
set oWinnt=GetObject("WinNT://" & domain)
For each oDomainItem in oWinnt
	classe=oDomainItem.Class
	Computer=oDomainItem.Name
	If classe="Computer" Then chgpwd(Computer) 
	Next
'
Wscript.quit
'--------------------------------------------------------------------
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
' -------------------------------------
Sub Syntaxe(info)
If info="" Then
	msg=      "Script VBS de modification de mot de passe d'un compte donné" & VBCRLF
	msg=msg & "sur toutes les machines d'un domaine ou workgroup" & VBCRLF & VBCRLF
	msg=msg & "JC BELLAMY © 2002" & VBCRLF 
Else
	msg="*** " & info & " ***" & VBCRLF
	End If
msg=msg & "------------------------------------------" & VBCRLF
msg=msg & "Syntaxe : " & VBCRLF
msg=msg & " chgallpwd [/d<domaine>] /u<utilisateur> /a<ancien> /n<nouveau>" & VBCRLF
msg=msg & " chgallpwd [-d<domaine>] -u<utilisateur> -a<ancien> -n<nouveau>" & VBCRLF 
msg=msg & "     <domaine>     : nom du domaine ou workgroup concerné" & VBCRLF
msg=msg & "                     si ce nom est omis, on prend le domaine" & VBCRLF
msg=msg & "                     de la machine locale" & VBCRLF
msg=msg & "     <utilisateur> : nom du compte utilisateur" & VBCRLF
msg=msg & "                     si absent => utilisateur courant" & VBCRLF
msg=msg & "     <ancien>      : ancien mot de passe" & VBCRLF
msg=msg & "     <nouveau>     : 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 Sub
' -------------------------------------
Sub chgpwd(computer)
root="\\" & computer & "\c$"
If not fso.FolderExists(root)  Then
	wscript.echo "*** L'ordinateur """ & computer & """ n'a pas été trouvé sur le réseau"
	exit sub
	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 "*** """ & user & """ n'est pas un utilisateur de " & computer	
	exit sub
	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"
else
	wscript.echo "Mot de passe de """ & user & """ sur """ & computer & """ correctement modifié!"
	end if
End Sub
'--------------------------------------------------------------------
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="*** Modification du mot de passe de """ & user & """ sur " & Computer & " non effectuée" & VBCRLF
msg=msg & "Fonction " & module & " - code " & hexerr & " : " & VBCRLF
msg=msg & desc 
wscript.echo msg
End Sub
' ------------------------------------- |