Frage 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?


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 Legacy-Datenspeicher, der auf ein neues Laufwerk (D) migriert, wenn es größer ist.

Die Datendeduplizierung wurde auf Laufwerk D vor einer Synchronisierung der Dateien von F nach D aktiviert.

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

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 finden und sie zu kopieren, aber ich hätte gerne einen besseren Weg!

Zur Zeit habe ich ein Skript, das nach Dateien mit dem ReparsePoint-Attribut sucht und dieses 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 basierend auf dieser Liste aus dem Quell-Repository kopieren. Ich würde es im Idealfall mögen, ein einziges Drehbuch zu sein!

Irgendwelche Scripting Gurus möchten helfen?

Prost


0
2018-04-10 05:35


Ursprung




Antworten:


Das Folgende 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"
    }        
}

0
2018-04-10 06:56