我编写了一个执行以下步骤的 Powershell 脚本。
- 它 RoboCopies 文件从服务器到外部硬盘驱动器(增量备份)
- 下次它应该检查服务器上是否有任何文件被删除,如果是,则将这些文件从备份文件夹移动到备份硬盘驱动器中名为 _DeletedFiles 的文件夹。
- 使用 /MIR 的 RoboCopy(这将删除服务器上已删除的文件以及备份中的文件,这没关系,因为我已经将它们保存在 _DeletedFiles 文件夹中)
这个 _DeletedFiles 文件夹的要点是,即使有人删除了文件,我们也希望将其保留至少 60 天。
现在这个脚本有点复杂,包括写入日志文件、测试路径和首次运行 if 语句等。
除了我想将服务器上删除的文件从备份复制到新文件夹的步骤之外,一切似乎都有效。
此步骤类似于以下内容:
$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
}
我得到的错误是文件无法复制,因为它们在目的地不存在;但是,它会尝试复制一开始就不应该复制的文件。
我想知道是否有人想更优雅地解决这个问题,或者如何修复我的代码片段。