2012-09-28 1 views
0

다음 단계를 수행하는 Powershell 스크립트를 작성했습니다. 외부 하드 드라이브로 서버에서Powershell robocopy/mir/mir가 삭제하기 전에 파일 복사

  1. 그것은 RoboCopies 파일 (증분 백업)가 어떤 파일이 서버에서 삭제 된 경우 너무로 백업 폴더에서 해당 파일을 이동하는 경우, 확인하도록되어
  2. 다음에 백업 하드 드라이브에 _DeletedFiles라는 폴더가 있습니다.
  3. ROBOCOPY/MIR은 (백업에 또한 서버에서 삭제 된 파일을 삭제하고 난 _DeletedFiles 폴더에 이미 저장된 때문 괜찮아 것이다)이의

포인트 _DeletedFiles 폴더가 있다는 것입니다 함께 누군가가 파일을 지우더라도 적어도 60 일 동안 어딘가에 보관하고 싶습니다. 내가 삭제 된 파일을 복사 할 경우 문 등

모든 단계를 제외하고 작동하는 것 같다 경우

지금이 스크립트는 조금 더, 로그 파일을 작성하는 경로 테스트를 포함하여 복잡하고 처음 실행입니다 BackUp에서 새 폴더로 이동합니다.

이 단계는이 유사하게 나타납니다

$testfolder = Test-Path "$UsbDisk\$backupFolder" 

     # If a Backup folder already exist then Compare files and see if any changes have been made 
     if ($testfolder -eq $true) { #IF_2 

        # Copy deleted files to BackUp Folder 
        MyLog "Check for Deleted Files on E:\" 0     
        $source = "E:\" 
        $sourcelist = Get-ChildItem $source -Recurse 
        $destination = "$UsbDisk\$backupFolder\Data_01\_DeletedFiles" 

        foreach ($file in $sourcelist){ 
        $result = test-path -path "E:\*" -include $file 
         if ($result -like "False"){ 
          Copy-Item $file -Destination "$destination" 
         } 

        } 

        # Start Synchronizing E:\ 
        MyLog "Start Synchronizing E:\" 0 
        Robocopy "E:\" "$UsbDisk\$backupFolder\Data_01" /mir /r:2 /w:3 /M /XD VM_* 

        MyLog "E:\ is up to Date" 0 

        # Copy deleted files to BackUp Folder 
        MyLog "Check for Deleted Files on F:\" 0  
        $source = "F:\" 
        $sourcelist = Get-ChildItem $source -Recurse 
        $destination = "$UsbDisk\$backupFolder\Data_02\_DeletedFiles" 

        foreach ($file in $sourcelist){ 
        $result = test-path -path "F:\*" -include $file 
         if ($result -like "False"){ 
          Copy-Item $file -Destination "$destination" 
          # Then Delete it from the BackUp 
         } 

        } 

        # Start Synchronizing F:\ 
        MyLog "Start Synchronizing F:\" 0 
        Robocopy "F:\" "$UsbDisk\$backupFolder\Data_02" /mir /r:2 /w:3 /M /XD VM_* 

        MyLog "F:\ is up to Date" 0 

     } 

나는 그들이 목적지에 존재하지 않기 때문에 파일을 복사 할 수 없음을 얻을 오류; 그러나, 그것은 처음부터 복사해서는 안되는 파일을 복사하려고합니다.

누구나이 문제를 좀 더 세련되게 해결할 생각이 있거나 내 코드를 수정하는 방법이 궁금합니다.

답변

1

문제가 test-path 명령에있을 수 있다고 생각합니다. include $fileinclude $file.Name으로 바꿉니다. include 매개 변수는 문자열이 아닌 객체를 필요로합니다.

그리고 코드 유지 관리를 위해 ($result -like "False")(-not $result으로 바꿉니다. $result에 문자열이 아닌 부울 값 ($true 또는 $false)이 포함되어 있기 때문입니다.

+0

덕분에 해결책에 한발 더 다가갔습니다. 내일 업데이트 된 코드를 올릴 것입니다. – seN

+0

나는 더 일반적으로 질문을 할 것이다. 지금까지 이것이 가장 좋은 대답이었다. – seN