Ich habe eine Situation, in der die Datendeduplizierung in Server 2012 die Metadaten beschädigt hat. Wie kann ich diese Dateien aus einem alten Repository kopieren?

389
Araska

Ich habe zwei Laufwerke - Laufwerk D: und Laufwerk F :. Bei beiden handelt es sich um Laufwerke, die lokal an den Server 2012-Computer angeschlossen sind. Laufwerk F ist ein älterer Speicher für Daten, die auf ein neues Laufwerk (D) migriert werden, wenn es größer ist.

Die Datendeduplizierung wurde auf Laufwerk D aktiviert, bevor die Dateien von F nach D synchronisiert wurden.

Robocopy / MIR hat den Deduplizierungsspeicher auf Laufwerk F beschädigt, sodass ich Dateien vom alten D-Laufwerk neu synchronisieren muss. (insbesondere diejenigen, die das APL-Attribut (Archiv, ReparsePoint, SparseFile) enthalten).

Das Problem, das ich habe, ist, dass einige der Dateien auf F seit der Umstellung geschrieben wurden. Ich habe versucht, ein Skript zu schreiben, um diese Dateien zu lokalisieren und sie zu kopieren, aber ich möchte einen besseren Weg, um darüber nachzudenken!

Derzeit habe ich ein Skript, das nach Dateien mit dem Attribut 'ReparsePoint' sucht und diese in eine Textdatei schreibt

function Recurse($path) {  $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path)  foreach ($i in $folder.files) { $i | select Path }  foreach ($i in $folder.subfolders) { $i | select Path  if ( (get-item $i.path).Attributes.ToString().Contains("ReparsePoint") - eq $false) {  Recurse($i.path) } } }  $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\filelist.txt  

Ich würde dann aus dem Quell-Repository basierend auf dieser Liste kopieren. Im Idealfall würde es mir gefallen, ein einzelnes Skript zu sein!

Irgendwelche Scripting-Gurus möchten helfen?

Prost

0

1 Antwort auf die Frage

0
Araska

Das unten funktioniert ganz gut;

Get-ChildItem -Recurse -File |  Where-Object { $_.Attributes -match "ReparsePoint" } | Foreach-Object { $currentFileName = $_.FullName $oldFileName = $currentFileName.replace("D:\", "F:\") if (Test-Path $oldFileName) { Copy-Item $oldFileName $currentFileName -Force Write-Host "Copied $oldFileName to $currentFileName" }  }