Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Условия для копирования.

Ответить
Настройки темы
PowerShell - Условия для копирования.

Новый участник


Сообщения: 17
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: tubxtru
Дата: 10-06-2020
Доброго времени суток. На самом деле я не смыслю в написании скриптов и поэтому прошу Вашей помощи.
Нужен скрипт который будет анализировать папку 1 и папку 2 (Папка 1 находится на одном компьютере, а папка 2 на другом. Компы в одной сети). Если в папке 1 нет данных, а в папке 2 есть данные, то из папки 2 начинается копирование файлов в папку 1 с последней датой изменения файла. (т.е. есть файлы 22.05 и 22.06 копирование файла произойдет 22.06). Если в папке 1 есть данные и в папке 2 есть данные, то начинается сверка файлов по дате, если в папке 1 старее файлы чем в папке 2, то файлы в папке 1 удаляются, после чего идет копирование файлов в папку 1 (опять же с последней датой изменения).

Не судите строго я еще зеленый.

Отправлено: 02:49, 10-06-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


То есть, папка 1 должна быть точной копией папки 2?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:58, 10-06-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:14, 10-06-2020 | #3


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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
У утилиты довольно широкие возможности по резервному копированию и синхронизации, поэтому при адаптации утилиты под свои нужды лучше обратиться к её документации.

Отправлено: 14:04, 10-06-2020 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


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

Синхронизировать папки 1 -> 2 можно так:
Код: Выделить весь код
robocopy c:\1 c:\2 /MIR

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:27, 10-06-2020 | #5


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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

Отправлено: 22:53, 10-06-2020 | #6


Новый участник


Сообщения: 17
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

На сервере каждый день формируется бэкап. Этот бэкап нужно перекинуть на 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\"
}

Последний раз редактировалось tubxtru, 11-06-2020 в 01:35.


Отправлено: 01:19, 11-06-2020 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Условия для копирования.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] как использовать ошибку в предыдущей команде для условия milligan Скриптовые языки администрирования Windows 10 26-06-2014 14:06
Любой язык - Скрипт для автоматического копирования SFlash Скриптовые языки администрирования Windows 0 18-03-2013 16:25
CMD/BAT - Батник для копирования файла scorp1992 Скриптовые языки администрирования Windows 0 23-06-2012 13:56
CMD/BAT - [решено] Команда копирования файла с указанием времени копирования Pozia Скриптовые языки администрирования Windows 6 16-10-2010 04:27
CMD/BAT - Скрипт для копирования пользователей. mitiya Скриптовые языки администрирования Windows 6 30-04-2009 16:13




 
Переход