Modification des mots de passe administrateur locaux des stations
Pourquoi ?
Suite à la reprise du réseau, les mots de passe administrateur locaux des stations sont ceux mis par les enseignants au grès de leur humeur. il sont parfois très simples, donnés aux élèves, oubliés, incohérent d'un ordinateur à l'autre dans une même salle.
Cela pose des problème de maintenance, lorsque le pc ne se connecte plus au domaine, lorsqu'il est envoyé en réparation, etc...
Mais, passer sur toutes les stations pour ré initialiser les mots de passe, ou le faire à distance (à condition que le PC soit allumé) n'est pas ma tasse de thé.
Je préfère passer par un script.
Principe :
On obtenu la liste des micros avec ce script. On peut le nettoyer pour éviter de traiter les serveurs par exemple mais un dictionnaire dans le script permet de ne traiter qu'une partie des PCs
On modifie le mot de passe par secteur, s'il n'y a pas de mot de passe pour un secteur alors pas de traitement.
On teste l'existance d'un fichier des pcs restant à traiter (PCS.RST) s'il existe, on l'utilise sinon on le copie à partir du fichier source (PCS.LST)
On lit le fichier des PCs à traiter et on les ping.
On met les PCS a traiter mais éteint dans un fichier temporaire et les PCs traités dans un fichier RAP.
On remplace le fichier des PCs restant par le fichier temporaire
Il faut programmer une tache qui s'exécute avec le compte administrateur, régulièrement. la tache n'est pas gourmande en ressource (c'est du ping).
'-----------------------------------------------------------------------------
'I Réatribution de mots de passe administrateur locaux par secteur
'I Dictionnaire des mots de passe
'I Fichier destination LISTEPCS.RST
'I fichier source LISTEPCS.LST
'I fichier rapport : LISTPCS.RAP
'I Pierre Choffardet LPR Voillaume
'I V 0.2 14/04/2006
'-----------------------------------------------------------------------------
' Le fichier source est obtenu par extraction AD
Option Explicit
DIM objFSO, objTextFile, objTempFile
DIM objDictPassw
Dim Ligne, PC, Salle, Secteur, passw
DIM objUser, strFileName, strFullName
DIM source, dest, rap
DIM objPCSTraitesFile
Const ForReading = 1, ForWriting = 2, ForAppending = 8
CONST strPath="C:\"
CONST strName = "LISTEPCS"
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFileName = objFSO.GetTempName
strFullName = objFSO.BuildPath(strPath, strFileName)
Set objTempFile = objFSO.CreateTextFile(strFullName)
source = strPath&strname&".LST"
dest = strPath&strname&".RST"
rap = strPath&strname&".RAP"
' à la première utilisation, le fichier RST n'existe pas
IF objFSO.FileExists(dest) THEN
Wscript.echo "traitement des pcs restant"
ELSE
objFSO.CopyFile source, dest
END IF
' à la première utilisation le fichier rap n'existe pas non plus
IF objFSO.FileExists(rap) THEN
Set objPCSTraitesFile = objFSO.OpenTextFile(rap, ForAppending)
ELSE
Set objPCSTraitesFile = objFSO.CreateTextFile(rap)
objPCSTraitesFile.Close
Set objPCSTraitesFile = objFSO.OpenTextFile(rap, ForAppending)
END IF
' ouvertur du fichier des PCS restant à traiter
Set objTextFile = objFSO.OpenTextFile(dest, ForReading)
'Dictionnaire des mots de passe (secteur, mot de passe)
Set objDictPassw = CreateObject("Scripting.Dictionary")
objDictPassw.ADD "TSE", "cqfd"
objDictPassw.ADD "MAI", "cqfd"
objDictPassw.ADD "CPI", "cqfd"
objDictPassw.ADD "tstc","cqfd"
objDictPassw.ADD "Contruction","cqfd"
objDictPassw.ADD "ELEC","cqfd"
objDictPassw.ADD "Prod", "cqfd"
objDictPassw.ADD "LP Computers","cqfd"
objDictPassw.ADD "SSI","cqfd"
' fichier soucrce 'PC;salle;secteur
Do While objTextFile.AtEndOfStream <> True
Ligne = split(objTextFile.Readline, ";")
PC = Ligne(0)
Salle = Ligne(1)
Secteur = Ligne(2)
' on a le mot de passe pour ce secteur ?
If objDictPassw.Exists(Secteur) Then
' et le PC est allumé ?
If(ping(PC) = 0) Then
passw = objDictPassw.Item(Secteur)
Set objUser = GetObject("WinNT://" & PC & "/Administrateur, user")
objUser.SetPassword passw
objUser.SetInfo
objPCSTraitesFile.WriteLine(PC&";"&Salle&";"&Secteur&";mot de passe modifié")
Else
' Il sera traité la prochaine fois
objTempFile.WriteLine(PC&";"&Salle&";"&Secteur)
End IF
Else
' On l'oublie, pas de mot de passe
objPCSTraitesFile.WriteLine(PC&";"&Salle&";"&Secteur&";pas de mot de passe pour ce secteur !")
End if
Loop
objTempFile.Close
objPCSTraitesFile.Close
objTextFile.Close
'le nouveau fichier des PCS à traiter;
objFSO.CopyFile strFullName, dest,True
objFSO.DeleteFile(strFullName)
Function ping(computer)
If computer="" Then
ping = 1
Else
Dim PINGIT, WshShell
set WshShell = CreateObject ("Wscript.shell")
PINGIT="cmd /c ping.exe " & computer & " | find /I " & CHR(34) & "octets=" & CHR(34)
ping = WshShell.Run(PINGIT,2,True)
End If
End Function