Eu tenho uma situação em que a desduplicação de dados no Server 2012 corrompeu os metadados - como posso copiar esses arquivos de um repositório antigo?

0

Eu tenho dois drives - drive D: e drive F :. Ambas são unidades conectadas localmente à máquina do Server 2012. A unidade F é um repositório legado de dados migrando para uma nova unidade (D), como é maior.

A desduplicação de dados foi ativada na unidade D, antes de uma sincronização dos arquivos de F para D.

O Robocopy / MIR corrompeu o repositório de deduplicação na unidade F, exigindo que eu sincronizasse novamente os arquivos da unidade D antiga. (especificamente, qualquer um que tenha o atributo APL (Archive, ReparsePoint, SparseFile) neles).

O problema que eu tenho é que alguns dos arquivos em F foram escritos desde a transição - Eu tentei escrever um script para localizar esses arquivos e copiá-los, mas eu gostaria de uma maneira melhor de fazer isso!

Atualmente, tenho um script que procura arquivos com o atributo 'ReparsePoint' e grava isso em um arquivo de texto

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 

Eu então copiava do repositório de origem com base nessa lista. Eu gostaria, idealmente, que fosse um roteiro único!

Algum gurus de script quer ajudar?

Felicidades

    
por Araska 10.04.2017 / 07:35

1 resposta

0

O abaixo funciona muito bem;

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"
    }        
}
    
por 10.04.2017 / 08:56