class NsBackupVersion

La classe NsBackupVersion décrit une version d'un fichier à une date donnée, auquel est attaché un flux de données stocké sur le serveur de sauvegarde.

ID : __int64 readonly

L'identificateur unique de la version du fichier.

CreationDate : VARIANT readonly

La date d'introduction de la version dans le serveur de sauvegarde, au format UTC.

FileID : __int64 readonly

L'identificateur du fichier parent.

IsUpToDate : VARIANT_BOOL readonly

Une variable booléenne indicant si la version actuelle est la dernière (IsUpToDate = true), ou si une version plus récente existe dans la sauvegarde (IsUpToDate = false).

IsEncrypted : VARIANT_BOOL readonly

Une variable booléenne indiquant si la version du fichier est chiffrée ou non.

IsCompressed : VARIANT_BOOL readonly

Une variable booléenne indiquant si la version du fichier est compressée ou non.

UpdateDate : VARIANT readonly

La date de révocation de la version dans le serveur de sauvegarde, au format UTC (lorsque une version plus récente à remplacé la version actuelle, ou que celle-ci a été supprimée par l'agent client car le fichier n'existait plus sur le poste client).

IsFromIncompleteBackup : VARIANT_BOOL readonly

Une variable booléenne indiquant si la version a été ajoutée au sein d'une sauveagarde ne s'étant pas exécuté jusqu'à son terme.

Size : __int64 readonly

La taille sur le disque client de la version du fichier.

StoredSize : __int64 readonly

La taille sur le serveur de sauvegarde de la version du fichier. Elle peut différer de la taille d'origine en fonction des options de chiffrement et de compression choisies.

FSIndex : __int64 readonly

L'identificateur unique du fichier sur le disque, si le système de fichiers le supporte (c'est le cas de NTFS).

WinAttribs : long readonly

Les attributs Windows de la version du fichier.

FileCreationDate : VARIANT readonly

La date de création attachée au fichier sauvegardé. Elle peut être au format local ou UTC en fonction du système de fichiers source.

FileLastModDate : VARIANT readonly

La date de dernière modification attachée au fichier sauvegardé. Elle peut être au format local ou UTC en fonction du système de fichiers source.

FileLastAccessDate : VARIANT readonly

La date de dernier accès attachée au fichier sauvegardé. Elle peut être au format local ou UTC en fonction du système de fichiers source.

VARIANT_BOOL LoadFromID(NsConnection Connection, __int64 VersionID)

Charge en mémoire la version de fichier spécifiée par l'identificateur VersionID.

VARIANT_BOOL CheckIntegrity(NsConnection Connection)

Retourne une variable booléenne indiquant si l'intégrité du fichier a pu être testée et que celui-ci est signalé comme intègre par le système de sauvegarde.

NsCheckIntegrityResult CheckIntegrityWithStatus(NsConnection Connection, NsCheckMode CheckMode)

Retourne le résultat du test d'intégrité pour la version courante.

BSTR Locate(NsConnection Connection)

Obtient le chemin de stockage de la version du fichier sur le serveur de sauvegarde.

Teste l'intégrité d'une sauvegarde et propose de révoquer les fichiers endommagés

Set connection = CreateObject("NsAPI.NsConnection")
Set sysutils = CreateObject("NsAPI.NsScriptUtils")

testedFiles = 0
intgOKCount = 0
intgErrCount = 0
rvkCount = 0
                                   '
' Teste toutes les versions d'un fichier donné
Sub TestAllVersions(connection, path, file)
  ' On récupère la liste des versions
  set versionsOfFile = file.Versions(connection)
  ' Pour chaque version...
  for each version in versionsOfFile
    ' On incrémente le nombre de fichiers testés
    testedFiles = testedFiles + 1
    ' On teste l'intégrité
    if not version.CheckIntegrity(connection) then
      intgErrCount = intgErrCount + 1
      ' Doit-on révoquer le fichier ?
      if MsgBox("Echec du controle d'intégrité pour ''" & path & "''. Souhaitez-vous supprimer le fichier du serveur ?",vbCritical + vbYesNo + vbApplicationModal,"Echec du contrôle d'intégrité") = vbYes Then
        ' Demander au serveur de le faire.
        if not file.Revoke(connection) then
          MsgBox "Impossible de révoquer le fichier #" & sysutils.Int64ToStr(file.ID)
        else
          ' On incrémente le nombre de fichiers révoqués
          rvkCount = rvkCount + 1
        end if
        ' On sort de la fonction car toutes les versions du fichier ont été révoquées
        exit Sub
      end if
    else
      ' On incrémente le nombre de fichiers marqués comme sains
      intgOKCount = intgOKCount + 1
    end if
  next
End Sub

' Tester le contenu d'un dossier
Sub RecursiveTestDir(connection, path, source, currentfolder)
  ' Examiner chaque version du fichier
  for each file in currentfolder.files
    TestAllVersions connection, source.BuildPath(path + file.Name), file
  next
  ' Pour chaque sous-dossier, appeler récursivement la fonction
  ' afin de les analyser chacun leur tour
  for each folder in currentfolder.subfolders
    RecursiveTestDir connection, sysutils.IncludeTrailingPathDelimiter(source.ParentPlatform, path + folder.Name), source, folder
  next
End Sub

' Tester le contenu d'une sauvegarde
Sub TestBackupContent(connection, backup)
  Set sources = backup.Sources(connection)

  ' Explorer chaque source de backup
  for each source in sources
    RecursiveTestDir connection, "", source, source.LoadContentWithUI(connection)
  next
End Sub


if connection.ConnectToLocalServer then
  set server = CreateObject("NsAPI.NsServer")

  if server.Load(connection) then ' Charger les infos serveur
    set backups = server.AllBackups(connection) ' Récupérer la liste de toutes les sauvegardes
    
    ' Demander un nom de sauvegarde
    backupName = InputBox("Saisissez le nom de la sauvegarde à tester : ", "Test de l'API UB", "")

    if backupName <> "" then ' Un nom valide a t-il été saisi
      p = backups.FindByName(backupName) ' Trouver la bonne sauvegarde
      if p = -1 then
        MsgBox "Impossible de continuer car la sauvegarde n'a pas pu être trouvée."
      else
        ' Tester la sauvegarde
        TestBackupContent connection, backups(p)
        ' Afficher un bilan
        MsgBox testedFiles & " fichiers ont été testés." & vbCrLf & intgOKCount & " fichiers ont été détectés cohérents." & vbCrLf & intgErrCount & " fichiers ont été détectés comme erronés." & vbCrLf & rvkCount & " fichiers ont été révoqués."
      end if
    end if
  else
    MsgBox "Impossible de charger les informations serveur."
  end if

else
  MsgBox "Connexion au serveur local impossible."
end if