Citation :
' -------------------------------------------------------------------- ' Script de sélection des comptes utilisateurs à afficher ou non ' dans l'écran de login de Windows XP ' ' Jean-Claude BELLAMY © 2001 ' -------------------------------------------------------------------- Dim network, computer, fso, ts, SAM, Item, member, oIE Set network = Wscript.CreateObject("WScript.Network" ) Set Shell = WScript.CreateObject("WScript.Shell" ) ' Création du fichier HTML qui va servir de formulaire fichtml=GetPath() & "logusers.html" computer=network.ComputerName ' nom de la machine locale Titre="Liste des comptes sur " & computer Set fso = WScript.CreateObject("Scripting.FileSystemObject" ) Set ts = fso.CreateTextFile(fichtml, True) ts.writeline "<html>" ts.writeline "<head>" ts.writeline "<title>" & Titre & "</title>" ts.writeline "<STYLE TYPE=""text/css"">" ts.writeline " body {" ts.writeline " font-family: Verdana;" ts.writeline " font-size: 10 pt }" ts.writeline " h1, h2, h3, h4, h5, h6 { font-family: Verdana }" ts.writeline "</STYLE>" ts.writeline "</head>" ts.writeline "<body bgcolor=""#FFFFD2"">" ts.writeline "<script language=""VBScript""> " ts.writeline "<!--" ts.writeline "Dim ready " ts.writeline "Sub B0_OnClick" ts.writeline "ready=-1 " ts.writeline "End Sub" ts.writeline "Sub B1_OnClick" ts.writeline "ready=1 " ts.writeline "End Sub" ts.writeline "Sub Window_OnLoad()" ts.writeline "ready=0 " ts.writeline "End Sub" ts.writeline "Public Function CheckVal()" ts.writeline "CheckVal=ready" ts.writeline "End function" ts.writeline "'-->" ts.writeline "</script>" ts.writeline "<form name=""logusersForm"">" ts.writeline "<h3><center>Ordinateur " & computer & "</center></h3><hr>" ts.writeline "<b>Etat d'affichage des comptes au démarrage :</b><p>" set SAM=GetObject("WinNT://" & computer & ",computer" ) nbusers=0 dim username(), fullname(), state() key="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList\" for each Item in SAM Classe=Item.Class If (Classe = "User" ) then ' Vérification si le compte est activé ou non ' On teste pour cela le bit 1 de la propriété "UserFlags" flags=Item.UserFlags if ((flags and 2)<>2) then nbusers=nbusers+1 redim preserve username(nbusers+1), fullname(nbusers+1), state(nbusers+1) username(nbusers)= Item.name p=instrRev(username(nbusers),computer) If p>0 Then d=len(username(nbusers))-len(computer) if p=d+1 then username(nbusers)=left(username(nbusers),d) End If fullname(nbusers)=Item.FullName if len(fullname(nbusers))=0 then fullname(nbusers)=username(nbusers) state(nbusers)="checked" ' Interception d'erreur (générée en cas de non-existence de clef) on error resume next stuser=shell.RegRead(key & Username(nbusers)) ' Par défaut, si le compte administrateur n'est pas dans la BDR, ' il n'est pas affiché au login if err.number <>0 then if (lcase(username(nbusers))="administrateur" ) or (lcase(username(nbusers))="administrator" ) then state(nbusers)="" else if ((stuser=0) or (stuser=65536)) then state(nbusers)="" end if on error goto 0 ts.writeline "<input type=""checkbox"" name=""usr" & nbusers &""" value=""" & username(nbusers) & """ " & State(nbusers) & ">" & fullname(nbusers) & "<br>" end if end if next ts.writeline "<input type=""button"" value=""Valider"" name=""B1"">" ts.writeline "<input type=""button"" value=""Annuler"" name=""B0"">" ts.writeline "</form>" ts.writeline "</body>" ts.writeline "</html>" ts.Close ' Ouverture d'Internet Explorer Set oIE = WScript.CreateObject("InternetExplorer.Application", "IE_" ) oIE.Left = 50
oIE.Top = 100 oIE.Height = 400 oIE.Width = 400 oIE.MenuBar = 0
oIE.ToolBar = 0 oIE.StatusBar = 0 oIE.navigate fichtml
oIE.Visible = 2
Do While (oIE.Busy)
WScript.Sleep 200
Loop shell.AppActivate Titre ' Attente d'action sur le bouton ou fermeture de la fenêtre On Error Resume Next Do
WScript.Sleep 100 Loop While (oIE.Document.Script.CheckVal() = 0) ' Si on ferme directement IE sans passer par un bouton, ' cela provoque une erreur qui est détectée et alors ' on quitte le script If Err <> 0 Then fso.DeleteFile fichtml,true Wscript.quit end if test=oIE.Document.Script.CheckVal() If test=-1 Then CloseIE Wscript.quit end if str="Etat des comptes au démarrage :" & vbcrlf ' Utilisation de la fonction execute afin de créer dynamiquement ' des commandes faisant intervenir des noms de champs variables dim f(), res() redim f(nbusers+1), res(nbusers+1) for i = 1 to nbusers f(i) = "function testusr() " & vbcrlf f(i) = f(i) & "testusr=65536" & vbcrlf f(i) = f(i) & "if oIE.Document.logusersForm.usr" & i &".Checked then testusr=1" & vbcrlf f(i) = f(i) & "end function" & vbcrlf execute f(i) res(i)=testusr() if res(i)=1 then etat="affiché" else etat="caché" str= str & vbcrlf & fullname(i) & " (" & username(i) & " ) : " & etat next str=str & vbcrlf & vbcrlf & "Confirmation des modifications ?" rep=MsgBox(str , vbYesNo + vbQuestion, titre) if rep=vbYes then for i = 1 to nbusers shell.RegWrite key & Username(i), res(i), "REG_DWORD" next end if CloseIE Wscript.quit '------------------------------------------------------------ ' Fonction de récupération du répertoire courant Function GetPath() Dim path path = WScript.ScriptFullName GetPath = Left(path, InStrRev(path, "\" )) End Function '------------------------------------------------------------ ' Fermeture d'Internet Explorer et suppression du fichier HTML Sub CloseIE oIE.Quit
Set oIE = Nothing fso.DeleteFile fichtml,true End Sub '------------------------------------------------------------
|