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
' ------------------------------------- |
Partager