Windows - Dateiversionsverlauf wiederherstellen

 

Das hier vorgestellte Powershell-Skript kopiert die neuesten Dateien des Dateiversionsverlauf in einen beliebigen Ordner oder auf einen anderen Computer. In der Kopie wird dabei das Datum aus dem Dateinamen entfernt und somit die ursprünglichen Dateinamen wiederhergestellt.

Der Dateiversionsverlauf kann auf dem Computer, auf dem der Dateiversionsverlauf aktiviert und konfiguriert ist, mittels Windows GUI verwaltet werden.

Nähere Informationen zum Dateiversionsverlauf: www.libe.net Windows-Dateiversionsverlauf

 

Die Daten sind vollständig im Dateisystem des Backupdatenträgers vorhanden, allerdings, wie eingangs schon erwähnt, mit einem Datum versehen:

 

Damit es einfach möglich ist, die Ordner und Files vom Datum zu befreien, habe ich ein kleines Skript geschrieben, welches die Dateien in einen beliebigen Ordner kopiert und das Datum dabei ignoriert.

Das folgende Skript ist eine sehr einfache Implementierung, es überschreibt die Dateien im Ziel, wenn mehrere Versionen existieren. Da die Funktion gci (Get-ChildItem) die Daten, zumindest in meinen Tests, nach Datum sortiert aufruft, sollte die neueste Dateiversion im Zielordner landen.

Beim Start des Skripts kann ein beliebiger Unterordner des FileHistory Ordners ausgewählt werden:

Im nächsten Dialog das Restoreziel:

 

im Anschluß kopiert Powershell alle Daten vom Backup Ordner (FileHistory) in den Restoreordner

Quellcode 

function Read-FolderBrowserDialog([string]$Message, [string]$InitialDirectory, [switch]$NoNewFolderButton){
    $browseForFolderOptions = 0
    if ($NoNewFolderButton) { 
        $browseForFolderOptions += 512 
    }

    $app = New-Object -ComObject Shell.Application
    $folder = $app.BrowseForFolder(0, $Message, $browseForFolderOptions, $InitialDirectory)
    if ($folder) { 
    $selectedDirectory = $folder.Self.Path } else { $selectedDirectory = '' 
    }
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($app) > $null
    return $selectedDirectory
}
#select Backup Folder
do{
    $filehistorypath = Read-FolderBrowserDialog -Message "please select History Folder: FileHistory\Username\Computername\Data\Drive ..." -NoNewFolderButton
    if (![string]::IsNullOrEmpty($filehistorypath)) { 
        Write-Host "You selected the directory: $filehistorypath" 
    } else { 
        "You did not select a directory." 
    }
    if ($filehistorypath.contains('\Data\C')) {
        echo 'Path contains: \Data\C'
    } else {
        echo 'Path does not contain: \Data\C'}
} until ($filehistorypath.contains('\Data\C'))
#Select Restore Folder
$restorepath=Read-FolderBrowserDialog -Message "please select a Restore Path" -NoNewFolderButton
if (![string]::IsNullOrEmpty($restorepath)) { 
    Write-Host "You selected the directory: $restorepath" 
} else {
    [Environment]::Exit(1) 
}

$Files=gci -Path $filehistorypath -Force -Recurse
for($i = 0; $i -lt $Files.Count; $i++){
    $restorepath1= $Files[$i].FullName -Split '\\Data\\C'
    $restorepath2= $restorepath1[1] -Split ' \(20'
    echo ($restorepath2[1] + " --> " +$restorepath2[0])
    $targetpath=split-path ($restorepath + $restorepath2[0] + $Files[$i].Extension)
    if (!(Test-Path $targetpath)) {
        mkdir $targetpath
    }
    Copy-Item ($Files[$i].FullName) ($restorepath + $restorepath2[0] + $Files[$i].Extension) -force 
}

Download: FileHistory.ps1

 

Den Quellcode einfach in eine .ps1 Datei kopieren und mittels Powershell starten:

 

Eventuell muss dazu vorher die Execution Policy angepasst werden, siehe:

wie erstelle ich ein PowerShell Skript 

  

Die Funktion Read-FolderBrowserDialog stammt von dieser Seite: http://blog.danskingdom.com

 

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare