Робокопия в Powershell со списком каталогов - PullRequest
0 голосов
/ 20 декабря 2018

Я пишу свой собственный скрипт резервного копирования для резервного копирования некоторых (но не всех) каталогов с моего компьютера.На данный момент список каталогов запрограммирован в моем файле сценариев (powershell), но идеальным способом был бы список внешних файлов.

Это то, что у меня есть до сих пор.

Clear-Host
$host.ui.RawUI.WindowTitle = "Backup script"
# get drive name
$driveName="smrbackup"
if ($backupDrive=(Get-PSDrive | Where-Object {$_.Description -eq     $driveName}).root) {
    write-host "found drive"
}
else {
    write-error "no backup drive"
    exit 1
}

$destFolder="robackup"
$dest=Join-Path -Path $backupDrive -ChildPath $destFolder
Write-host "backup destination is $dest"

# robocopy parameters
# /MIR Spiegelt eine Verzeichnisstruktur und löscht Dateien, die in der Quelle gelöscht wurden
# /V verbose output
# /DCOPY:T kopiert Verzeichnistimestamp
$parameters = @("/MIR", "/NP", "/R:3", "/W:2", "/FFT", "/MT:16")



$shutdown= Read-Host "`r`nshutdown after backup? (j/n/q = quit)"
if ($shutdown -eq "j") {
    "Der Computer wird nach dem Backup heruntergefahren!"
}
elseif ($shutdown -eq "q"){
    exit 0
}

cd c:\
# Liste aller zu kopierenden Verzeichnisse
"users\Stefan M\Documents",
"users\Stefan M\Desktop",
"users\Stefan M\Downloads",
"users\Stefan M\Music",
"users\Stefan M\VirtualBox VMs",
"MESS" | % { robocopy $_ ($dest + "/" + $_) $parameters }

Некоторые вопросы:

  1. Я нашел последнюю строку (pipe и команду) в интернете, и она, кажется, работает.Может ли кто-нибудь объяснить мне, что здесь происходит?
  2. с помощью rsync. Я могу сделать все каталоги за один раз rsync, и после резервного копирования у меня есть сводная информация о том, сколько файлов было скопировано и произошли ошибки.С помощью приведенной выше строки Robocopy запускается для каждого каталога, поэтому я не вижу, была ли скопирована предыдущая папка или произошла ошибка.Как я могу получить сводку всех папок в конце?

Для 2 я мог бы построить что-то с помощью цикла for, но как я могу увидеть общий результат копирования?Что-нибудь более изящное, чем сбор кодов выхода?

Cheers, Stefan

edit: я нашел эту строку, чтобы использовать список файлов.Таким образом, остающийся вопрос заключается в том, как я могу получить итоговую сводку после всех прогонов робокопии?

cd c:\
gc "c:\Users\Stefan Mayrhofer\Documents\script\backup-src.txt" | % { robocopy $_ ($dest + "/" + $_) $parameters }

1 Ответ

0 голосов
/ 20 декабря 2018

Ваша последняя строка создает массив и выполняет robocopy foreach -line (% - псевдоним foreach).$_ является заполнителем для элемента, который в данный момент обрабатывается.

Чтобы получить тот же результат с файлом, хранящим ваши данные, создайте .txt-файл (или .csv, если хотите) с одним путемза строкуТеперь используйте get-content, чтобы получить содержимое этого файла в виде массива и сохранить его в переменной или использовать его непосредственно в канале:

Get-Content -Path $YourFilePath | foreach { robocopy $_ ($dest + "/" + $_) $parameters }

Если вы хотите собрать результаты robocopy, просто сохраните ихв переменной:

$Output = Get-Content -Path $YourFilePath | foreach { robocopy $_ ($dest + "/" + $_) $parameters }
...