cleanGPMCBackupFolder
Écrit par Gilles LAURENT   
22-10-2006

Suppression des dossiers "backupId" GPMC en double après une sauvegarde totale

Ce script devra s'exécuter après une sauvegarde totale des GPOs. La sauvegarde totale est réalisée soit via l'interface graphique GPMC ou soit à l'aide du script BackupAllGPOs.wsf fourni avec la console. Les doublons du répertoire de sauvegarde seront automatiquement supprimés et seuls les dossiers des GPOs modifiées seront préservés. La case à cocher "N'afficher que la dernière version des objets GPO" disponible dans la fenêtre de gestion des sauvegardes prendra alors tout son sens.

Historique:
Version 1.0 - première release publique

Plateformes supportées:
Windows XP/2003

Pré requis:
GPMC SP1

Usage:
\>cscript cleanGPMCBackupFolder.vbs <gpmc_backup_folder>

Code source VBScript:

  1  Option Explicit
  2 
  3  ' déclaration des variables
  4  Dim oFs, oRs, oXml, oFolder
  5  Dim colFolders
  6  Dim strBkpFolder
  7  Dim nRecordIndex
  8 
  9  ' définition des constantes
 10  Const adFilterNone = 0
 11  Const adUseClient = 3
 12  Const adOpenStatic = 3
 13  Const adVarChar = 200
 14 
 15  ' initialisation des objets
 16  Set oFs = CreateObject ("Scripting.FileSystemObject")
 17  Set oRs = CreateObject ("ADODB.RecordSet")
 18  set oXml = CreateObject ("Microsoft.XMLDOM")
 19 
 20  ' définition des propriétés de la base de données
 21  ' la base de données est du type déconnectée
 22  oRs.CursorLocation = adUseClient
 23  oRs.CursorType = adOpenStatic
 24 
 25  ' définition de la structure de la table
 26  oRs.Fields.Append "backupId", adVarChar, 38
 27  oRs.Fields.Append "timeStamp", adVarChar, 20
 28  oRs.Fields.Append "backupInfo", adVarChar, 57
 29 
 30  ' ouverture de la base de données
 31  oRs.Open
 32 
 33  ' lecture du dossier des sauvegardes gpmc
 34  ' le dossier est passé comme argument
 35  strBkpFolder = WScript.Arguments (0)
 36 
 37  ' lecture des backupId
 38  Set colFolders = oFs.GetFolder (strBkpFolder).SubFolders
 39 
 40  ' insertion des enregistrements dans la table
 41  For Each oFolder in colFolders
 42      oRs.AddNew
 43      oRs.Fields ("backupId").Value = oFolder.Name
 44      oRs.Fields ("timeStamp").Value = DateDiff ("s", 0, oFolder.DateCreated)
 45      oRs.Fields ("backupInfo").Value = GetBkpInfo (oFolder.Name)
 46  Next
 47 
 48  ' tri des backupId par ordre de création
 49  ' en cas de doublon, cela permet de conserver la sauvegarde
 50  ' la plus ancienne et donc supprimer la plus récente
 51  oRs.MoveFirst
 52  oRs.Sort = "timeStamp ASC"
 53 
 54  ' recherche des doublons
 55  Do While Not oRs.EOF
 56      ' sauvegarde de la position du pointeur
 57      nRecordIndex = oRs.AbsolutePosition
 58 
 59      ' création du filtre permettant d'identifier les doublons
 60      ' du backupId en cours de traitement
 61      oRs.Filter = GetBkpFilter (oRs.Fields ("backupId").Value, oRs.Fields ("backupInfo").Value)
 62 
 63      ' suppression des doublons du backupId en cours de traitement
 64      ' tous les doublons sont identifiés grâce au filtre
 65      Do While Not oRs.EOF
 66          oFs.DeleteFolder strBkpFolder & "\" & oRs.Fields ("backupId").Value, True
 67          WScript.Echo oRs.Fields ("backupId").Value & " (deleted)"
 68          oRs.Delete
 69          oRs.MoveNext
 70      Loop
 71 
 72      ' suppression du filtre
 73      oRs.Filter = adFilterNone
 74 
 75      ' traitement de l'enregistrement suivant
 76      oRs.AbsolutePosition = nRecordIndex + 1
 77  Loop
 78 
 79  ' lecture du fichier gpreport.xml
 80  Function GetBkpInfo (strBackupId)
 81     
 82      ' chargement du fichier xml
 83      oXml.Async = False
 84      If Not oXml.Load (strBkpFolder & "\" & strBackupId & "\" & "gpreport.xml") Then
 85          ' une erreur est survenue
 86          ' le format xml n'est pas conforme ou le fichier n'est pas présent
 87          WScript.Echo "*ERROR* Unable to load gpreport.xml from " & strBackupId
 88          WScript.Quit (1)
 89      End If
 90 
 91      ' gestion des erreurs
 92      On Error Resume Next
 93 
 94      ' analyse du fichier xml
 95      GetBkpInfo = _
 96          oXml.getElementsByTagName ("Identifier/Identifier")(0).text & _
 97          oXml.getElementsByTagName ("ModifiedTime")(0).text
 98 
 99      ' vérification de l'analyse xml
100      If Err.Number <> 0 Then
101          ' une erreur est survenue
102          ' le fichier xml n'est pas conforme
103          WScript.Echo "*ERROR* Unable to parse gpreport.xml from " & strBackupId
104          WScript.Quit (1)
105      End If
106 
107      ' désactivation de la gestion des erreurs
108      On Error Goto 0
109 
110  End Function
111 
112  ' création du filtre permettant d'identifier les doublons
113  Function GetBkpFilter (strBackupId, strBackupInfo)
114 
115      GetBkpFilter = _
116          "backupId <> '" & strBackupId & "' " & _
117          "And backupInfo = '" & strBackupInfo & "'"
118  End Function

Téléchargement:
Guide PDF: -
Archive: cleangpmcbackupfolder.zip

Dernière mise à jour : ( 23-10-2006 )