J'ai écrit un script Powershell qui suit les étapes suivantes.Powershell robocopy/mir Copier des fichiers avant/mir supprime
- Il RoboCopies fichiers à partir d'un serveur sur un disque dur externe (sauvegarde incrémentielle)
- La prochaine fois qu'il est censé vérifier si des fichiers ont été supprimés sur le serveur, le cas échéant déplacer ces fichiers dans le dossier de sauvegarde un dossier appelé _DeletedFiles dans le disque dur de sauvegarde.
- RoboCopy avec/MIR (qui supprimera les fichiers qui sont supprimés sur le serveur également sur la sauvegarde, et c'est correct parce que je les ai sauvés déjà sur le dossier _DeletedFiles)
point de ce _DeletedFiles dossier est que Même si quelqu'un a supprimé un fichier, nous voulons le garder quelque part pendant au moins 60 jours.
Maintenant, ce script est un peu plus complexe, y compris l'écriture dans le fichier journal, chemins de test, et la première course instruction if etc.
Tout semble fonctionner, sauf l'étape où je veux copier les fichiers qui sont supprimés sur le serveur à partir du BackUp vers un nouveau dossier.
Cette étape ressemble à ceci:
$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
}
L'erreur que je reçois que les fichiers ne peuvent pas être copiés parce qu'ils n'existent pas à la destination; cependant, il essaie de copier des fichiers qui ne devraient pas être copiés en premier lieu.
Je me demande si quelqu'un a une idée pour résoudre cela plus élégant, ou comment réparer mon code snip.
Merci cela m'a rapproché de la solution. Je posterai un code mis à jour demain ou à peu près. – seN
Je vais poser la question plus généralement, jusqu'à présent, c'était la meilleure réponse. – seN