PowerShell - Условия для копирования.

Ответить
Аватара пользователя
tubxtru

PowerShell - Условия для копирования.

Сообщение tubxtru »

Доброго времени суток. На самом деле я не смыслю в написании скриптов и поэтому прошу Вашей помощи.

Нужен скрипт который будет анализировать папку 1 и папку 2 (Папка 1 находится на одном компьютере, а папка 2 на другом. Компы в одной сети). Если в папке 1 нет данных, а в папке 2 есть данные, то из папки 2 начинается копирование файлов в папку 1 с последней датой изменения файла. (т.е. есть файлы 22.05 и 22.06 копирование файла произойдет 22.06). Если в папке 1 есть данные и в папке 2 есть данные, то начинается сверка файлов по дате, если в папке 1 старее файлы чем в папке 2, то файлы в папке 1 удаляются, после чего идет копирование файлов в папку 1 (опять же с последней датой изменения).



Не судите строго я еще зеленый.
Аватара пользователя
DJ Mogarych

Re: PowerShell - Условия для копирования.

Сообщение DJ Mogarych »

То есть, папка 1 должна быть точной копией папки 2?
Аватара пользователя
Busla

Re: PowerShell - Условия для копирования.

Сообщение Busla »

tubxtru, вам лучше ПО для синхронизации какое-нибудь посмотреть.
Аватара пользователя
Busla

Re: PowerShell - Условия для копирования.

Сообщение Busla »

tubxtru



Просто средствами скриптов это, наверное, проблематично сделать...(((

Я для подобных задач (по сути, это односторонняя синхронизация папки 1 с папкой 2) использую nnbackup.exe от

nncron.

nnbackup.exe - command-line утилита, подключаем сетевой диск и CMD-шник типа такого (у меня такая строка параметров):





Код:

Код: Выделить всё

Set In=C:\papka-2
Set Out=U:\papka-1
Set NameLog="имя-лог-файла"
"C:\nnBackup\nnbackup.exe" sync -i %In% -o %Out% -tc -t2 -ad -s -v -e -delete-before -log C:\Temp\%NameLog%_%Date%.log

У утилиты довольно широкие возможности по резервному копированию и синхронизации, поэтому при адаптации утилиты под свои нужды лучше обратиться к её документации.
Аватара пользователя
DJ Mogarych

Re: PowerShell - Условия для копирования.

Сообщение DJ Mogarych »

nncron был хорош во времена Windows XP, сейчас в нём смысла никакого, да и польская нотация - это на большого любителя.

Для синхронизации и копирования очень хорошо подходит robocopy.



Синхронизировать папки 1 -> 2 можно так:



Код:

Код: Выделить всё

robocopy c:\1 c:\2 /MIR
Аватара пользователя
greg zakharov

Re: PowerShell - Условия для копирования.

Сообщение greg zakharov »

Цитата lev0tsk:



Просто средствами скриптов это, наверное, проблематично сделать...



Вы само очарование наивности. Если бы было четкое описание сути задачи, а также пояснение ее нюансов, вы бы давно получили заветный пирожок (стряхнули пыль и положили бы обратно на полочку). А так... так, пожалуй, следует прислушаться DJ Mogarych, robocopy вполне может послужить отправной точкой в решении вашей задачи.
Аватара пользователя
tubxtru

Re: PowerShell - Условия для копирования.

Сообщение tubxtru »

Извините господа. Это я не правильно понял задачу. И не правильно ее изложил Вам.



На сервере каждый день формируется бэкап. Этот бэкап нужно перекинуть на 2 харда. Еще раз попробую выложить свое понимание ситуации: если на диске 1 и 2 нет бэкапа, то бэкап записывается на оба, если на диске 1 есть бэкап, а на диске 2 его нет то пишется на 2 диск. Т.е. бэкап на 1 диске остается старым. (как резервная копия) Если на диске 1 и 2 уже есть бэкапы, то определяется самый старый, а из предыдущего условия самый старый бэкап остался на диске 1, то происходит удаление старого бэкапа с диска 1 и начинается запись свежего. Т.е. теперь бэкап на диске 2 уже становится старым ну и аналогично дальше.



Опять же для всего этого нужен лог файл где написано имя бэкапа машины дата время начала копирования и так же окончание копирования.



#---задаем имя машины и каталоги резервного копирования, каталог логирования, записываем время начала

$VMName ="1cs"

$log ="C:\Scripts\logs\" + $VMName+ ".log"

$data = Get-Date -Format "dddd MM/dd/yyyy HH:mm"

$VMName+" --- START --- "+$data >> $log

$txt1 = "\\pk1\F$\pk7\1sc.txt"

$txt2 = "\\pk2\R$\pk7\1sc.txt"

$istxt1 = Test-Path $txt1

$istxt2 = Test-Path $txt2

if ($istxt1 -eq "True" -and $istxt2 -ne "True")

#===================================

$BackupPath=$BackupDisk+$VMName

Get-ChildItem -Path $BackupPath -Include * | remove-Item -recurse

#---Проверяем наличие папки назначения, если нет, то создаем

if (!(Test-Path $BackupPath)){md $BackupPath}

$data = Get-Date -Format "dddd MM/dd/yyyy HH:mm"

$VMName+" --- FINISH --- "+$data >> $log



я не знаю может это чем поможет но это у меня как образец...



{

New-Item -Path "\\pk1\R$\pk7\" -name 1sc.txt -type "file"

$BackupDisk = "\\pk2\R$\pk7\"

Remove-Item -Path $txt1

}elseif ($istxt2 -eq "True" -and $istxt1 -ne "True")

{

New-Item -Path "\\pk1\F$\pk7\" -name 1sc.txt -type "file"

$BackupDisk = "\\pk2\F$\pk7\"

Remove-Item -Path $txt2

}elseif ($istxt2 -eq "True" -and $istxt1 -eq "True")

{

$file1 = Get-Item $txt1

$file2 = Get-Item $txt2



if ($file1.LastWriteTime -gt $file2.LastWriteTime)

{

$BackupDisk = "\\pk2\R$\pk7\"

Remove-Item -Path $txt1

}else

{

$BackupDisk = "\\pk1\F$\pk7\"

Remove-Item -Path $txt2

}

}elseif($istxt1 -ne "True" -and $istxt2 -ne "True"){

New-Item -Path "\\pk2\R$\pkr7\" -name 1sc.txt -type "file"

$BackupDisk = "\\pk2\R$\pkr7\"

}
Ответить

Вернуться в «Скриптовые языки администрирования Windows»