Suppression des profils obsolètes

Pourquoi ?

J'ai laissé dans la configuration du domaine, la copie en cache des profils itinérants. Cela permet un accès à la station même si un contrôleur de domaine est indisponible.

Mais, au bout d'un certain temps, la station est polluée par tous les profils des utilisateurs passés sur la station. Il faut faire le ménage.

Passer sur tous les postes, non merci. On va faire un script.


Principe :

Comme pour la mise à jour des mots de passe administrateur, on utilise le fichier de la liste des micros du lycée créé avec ce script

La différence se situe au niveau de l'utilisation de delprof du ressource kit (disponible ici).

Le dictionnaire est utilisé pour valider le nettoyage sur un secteur.


'-----------------------------------------------------------------------------
'I Suppression des profils obsolètes
'I Dictionnaire des secteurs à traiter
'I Fichier destination RESTEPCS.LST
'I fichier source LISTEPCS.LST
'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,WshShell
DIM objDictPassw
Dim Ligne, PC, Salle, Secteur, passw
DIM objUser, strFileName, strFullName
DIM source, dest, rap, action
DIM objPCSTraitesFile

CONST delay = 1
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 WshShell = CreateObject ("Wscript.shell")

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
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", "ok"
objDictPassw.ADD "MAI", "ok"
objDictPassw.ADD "CPI", "ok"
objDictPassw.ADD "tstc","ok"
objDictPassw.ADD "Contruction","ok"
objDictPassw.ADD "ELEC","ok"
objDictPassw.ADD "Prod", "ok"
objDictPassw.ADD "LP Computers","ok"
objDictPassw.ADD "SSI","ok"

' 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
action="delprof.exe /q /c:\\"&PC&" /d:"&delay
WshShell.Run action,4,true
Else
' Il sera traité la prochaine fois
objTempFile.WriteLine(PC&";"&Salle&";"&Secteur)
End IF
Else
' On l'oublie, pas dans le bon secteur
objPCSTraitesFile.WriteLine(PC&";"&Salle&";"&Secteur&";PC non traité !")
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,1,True)
End If
End Function