Оглавление
Простое зеркалирование каталогов
Пример
robocopy F: \\192.168.1.1\F /MIR /COPYALL /Z /B /J /R:3 /W:0
Зеркалирование диска F: в сетевую директорию \\192.168.1.1\F с сохранением всех прав на файлы и возможностью продолжить копирование при обрыве.
Параметры
/MIR – полное зеркалирование каталогов (эквивалентно ключам /e вместе с /purge). Использование ключа /MIR вместе с ключом /E и указанием директории назначения, перезапишет все настройки безопасности в директории назначения.
/COPYALL – копирует всю информацию о файле (Атрибуты, параметры безопасности и т.д.). Как альтернатива, можно применять флаг /COPY:DT для копирования timestamp, а не всей информации. /COPYALL требует прав администратора
/Z – robocopy продолжит копирование файла при обрыве.
/B – позволяет robocopy избегать ошибки access denied error. В этом режиме robocopy игнорирует все права на файлы, которые могли бы помешать прочитать/записать файл. Этот режим требует прав администратора.
/J – копирование без буфера (файлового кэша, оперативной памяти). Эффективно для больших файлов.
/R:3 – количество попыток скопировать недоступный файл. Значение по умолчанию – миллион, поэтому необходимо его сменить.
/W:0 – секунды между попытками скопировать недоступный файл. Значение по умолчанию – 30 секунд.
Синтаксис
robocopy <source> <dest> [фильтр файлов] [параметры]
Копирование по сети с использованием логина и пароля
Вы не сможете просто так скопировать что то используя Robocopy по сети с дополнительной аутентификацией. Robocopy не умеет передавать учетные данные по сети, однако для этих целей можно использовать net use чтобы подключить IPC$ шару и выполнить копирование уже на нее.
Важно! Будут использоваться UNC пути, поэтому исходная и назначения папки должны быть расшарены по сети.
Копирование через cmd
Подключаем сетевую папку через cmd:
NET USE \\RemoteServerName\IPC$ /u:server\user "password"
Копируем файлы с помощью robocopy:
robocopy \\Source\ \\RemoteServerName\DestinationDir\ /MIR /COPYALL /Z /B /J /R:3 /W:1
Отключаем присоединенную шару:
NET USE \\RemoteServerName\IPC$ /D
Скрипт для Powershell
Содержит параметры для кастомизации
Умеет отправлять е-мэйл по окончании работ
# IPC$ share options #
$IPCHost = "host_name" # Host name to create IPC$ share with
$IPCUser = "domain\user" # Authentication
$IPCPwd = "Pa$$w0rd" # for IPC$ share
# Copy TO settings #
$DstHost = "host_name" # Destination Host Name
$DstDir = "root_share\folder\name" # Destination Directory Path
# Copy FROM settings #
$SrcHost = "host_name" # Source Host Name
$SrcDir = "root_share\folder\name" # Source Directory Path
# E-Mail Settings #
$LogPath = "c:\full_path.log" # Full path to log file (c:\temp.name.log)
$EmailTo = "email@domain.com" # Recipient email address
$EmailFrom = "email@domain.com" # Sender email address
$EmailSubj = "subject_here" # Letter Subject
$EmailBody = "body_here" # And body
$EmailSmtpSrv = "server_name" # SMTP server name (FQDN)
# Parameters (robocopy keys) #
$Params = "/XD * /Z /MIR" # Specify needed robocopy.exe parameters here
# Action Block #
NET USE \\$IPCHost\IPC$ /u:$IPCUser $IPCPwd
robocopy.exe \\$SrcHost\$SrcDir\ \\$DstHost\$DstDir\ $Params /LOG:$LogPath
NET USE \\$IPCHost\IPC$ /D
Send-MailMessage -To $EmailTo -From $EmailFrom -Subject $EmailSubj -Body $EmailBody -SmtpServer $EmailSmtpSrv -Attachments $LogPath
Убираем атрибут скрытый с папок и файлов при копировании
При копировании целого диска в отдельную папку эта папка помечается атрибутом скрытый, который можно убрать только через командную строку.
Чтобы этого не происходило при копировании указываем не копировать атрибуты скрытый и системный:
robocopy F: \\192.168.1.1\F /MIR /COPYALL /Z /B /J /R:3 /W:0 /A-:SH
Ссылки
https://klyavlin.wordpress.com/2012/09/19/robocopy-network-usernamepassword/
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
https://winitpro.ru/index.php/2020/05/13/robocopy-sinxronizaciya-i-rezervnoe-kopirovanie-fajlov/
https://learn.microsoft.com/ru-ru/windows-server/administration/windows-commands/robocopy