У меня два диска - диск D: и диск F:. Оба эти диска локально подключены к компьютеру с Server 2012. диск F - это устаревшее хранилище данных, мигрирующих на новый диск (D) по мере его увеличения.

Дедупликация данных была включена на диске D до синхронизации файлов из F в D.

Robocopy /MIR повредил хранилище дедупликации на диске F, что потребовало повторной синхронизации файлов со старого диска D. (в частности, любые, которые имеют атрибут APL (Archive, ReparsePoint, SparseFile) на них).

У меня проблема в том, что некоторые файлы на F были записаны с момента переключения - я попытался написать скрипт, чтобы найти эти файлы и скопировать их, но я хотел бы найти лучший способ сделать это!

В настоящее время у меня есть скрипт, который ищет файлы с атрибутом ReparsePoint и записывает их в текстовый файл.

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 

Затем я скопировал бы из исходного хранилища на основе этого списка. В идеале мне бы хотелось, чтобы это был единый сценарий!

Любые гуру сценариев хотят помочь?

ура

1 ответ1

0

Ниже работает довольно хорошо;

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .