Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 15
1

Полный и дифференцированный бэкапы определенных папок

27.11.2015, 13:12. Показов 3429. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день формчане, подскажите пожалуйста, что не так делаю и как нужно сделать, собственно написал такой скрипт, делает полное копирование папок рабочий стол, мои документы, и архивирует их, задача следующая, помимо этого нужно сделать дифференцированный бекап измененных файлов от момента создания полного бекапа

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Windowstyle -hidden #чтобы окошко не всплывало
$BackupDrivePath="D:"
$ArchiveTaskName="WorkSpaceUserFull"
$ArchiveDstPath = $BackupDrivePath+"Backup"
$SevenZipExecutablePath = "C:\Program files\7-Zip\7z.exe"
$ScriptLogFile = "D:\Backup\BackupFiles.log"
if ($LogVars=1) {
    echo "================================================================="
    echo "ScriptLogFile: $ScriptLogFile"
    echo "SevenZipExecutablePath: $SevenZipExecutablePath"
    echo "================================================================="
    }
echo "Backup started at: $(Get-Date)"
 
Start-Transcript -path $ScriptLogFile
if ((get-childitem $([System.Environment]::GetFolderPath(‘Desktop’)) -Exclude *.lnk)){
 
if (!(Test-Path "D:\Backup\Desktop"))
    {
    New-Item -Path "D:\Backup\Desktop" -ItemType "directory"
    }
if (!(Test-Path "D:\Backup\Documents"))
    {
    New-Item -Path "D:\Backup\Documents" -ItemType "directory"
    }
 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
 
$Result=[Windows.Forms.MessageBox]::Show("Копируем автоматически все файлы с рабочего стола и из папки Мои документы на личный диск D") #Всплывающее окно
Write-Host «Выполняем» # в консоль
 
get-childitem -Path $([System.Environment]::GetFolderPath(‘Desktop‘)) -Exclude *.lnk | Copy-Item -Destination D:\Backup\Desktop\ -force
 
get-childitem -Path $([System.Environment]::GetFolderPath(‘MyDocuments‘)) -Exclude *.lnk | Copy-Item -Destination D:\Backup\Documents\ -force
Write-Host «Готово» # в консоль
#$Result=[Windows.Forms.MessageBox]::Show("Копирование выполнено в папку Backup на диске D")
 
function zip ($source, $destination) {
    $7zip = "C:\Program Files\7-Zip\7z.exe"
    $args =  "-pltdp", "a", "-tzip", "$destination", "$source", "-r"
    & $7zip $args
}
Stop-Transcript
$s1 = "D:\Backup\*"
$s2 = $BackupDrivePath+ $ArchiveTaskName+"_$(Get-Date -format "yyyyMMdd")"
zip $s1 $s2
 
#del "D:\Backup\*" -Recurse
$Result=[Windows.Forms.MessageBox]::Show("Создана резервная копия на диске D")
} #Всплывающее окно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2015, 13:12
Ответы с готовыми решениями:

Бекап определённых папок в Debian
Всем привет. Проблема следующая. Есть скрипт который по крону делает бекап определённых папок в...

Показ список файлов из определенных папок
Здравствуйте. Короче идея такая. Есть некоторые виды папок DATA Campaigns Downloads Maps...

Программа по добавлению папок в определённых директориях
Здравствуйте. Помогите написать небольшую программу, которая-бы добавляла папки в определённых...

Распаковка определённых папок/файлов из 7z (JEDI)
Есть функция - распаковывает полностью архив, а нужно что бы только опредёлённые папки и файлы: ...

8
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
27.11.2015, 14:25 2
Версия PowerShell? И поясните, что означает
Цитата Сообщение от CooperBel
дифференцированный бекап измененных файлов от момента создания полного бекапа
.
0
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 15
27.11.2015, 16:36  [ТС] 3
желательно 3й, чтобы win7 могло это скушать
по поводу дифференцированного: раз в месяц надо делать полный бекап, а дифференцированный - это делать бекап только тех файлов, которые были изменены с момента полного бекапа
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
27.11.2015, 21:07 4
Общий алгоритм:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
if (!(Test-Path ($$ = (gcm 7za).Definition))) {
  Write-Warning "7-zip не в переменной PATH не обнаружен."
  break
}
 
'Desktop', 'MyDocuments' | % {
  # вспомогательная анонимная функция
  $arc = {param([String]$Path, [String]$Archive)
    [void](cmd /c "7za a -mx9 -x!*.lnk $(
      Join-Path $Path `"$($Archive)_$(date -u %Y%m%d).zip`"
    ) `"$(
      [Environment]::GetFolderPath($_)
    )\*`"")
  }
}{
  # если папок для хранения резервных копий не существует
  if (!(Test-Path ($d = "D:\backup\$($$ = $_ -replace 'My', '')$$"))) {
    [void](ni $d -type directory)
  }
  
  if (($zip = @(gci $d | sort CreationTime)[-1]) -eq $null) {
    # если папки пусты, то сравнение дат невозможно
    # создать резервные копии и завершить выполнение сценария
    &$arc $d $$
    break
  }
  
  # если не прошло около месяца...
  if (((Get-Date) - $zip.CreationTime).Days -le 30) {
    # найти все файлы с датой модификации старше создания
    # последней резервной копии...
    gci ([Environment]::GetFolderPath($_)) -r -ex *.lnk |
    % {
      if (($_.LastWriteTime - $zip.CreationTime).Days -gt 0) {
        &7za a -mx9 $(
          Join-Path $d "$$_$(date -u %Y%m%d).zip"
        ) $_.FullName | Out-Null
      }
    }
  }
  else {
    # в противном случае - миновало около месяца - создать
    # создать новую резервную копию
    &$arc $d $$
  }
}
0
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 15
30.11.2015, 10:09  [ТС] 5
сразу вопрос
PowerShell
1
2
3
4
if (!(Test-Path ($$ = (gcm 7za).Definition))) {
  Write-Warning "7-zip не в переменной PATH не обнаружен."
  break
}
откуда берется 7z
и в последних версиях 7z уже нет файла 7za, есть: 7z, 7zFM, 7zG.
и что предопределяет переменные: $Path и $Archive
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
30.11.2015, 10:24 6
Цитата Сообщение от CooperBel
откуда берется 7z
и в последних версиях 7z уже нет файла 7za, есть: 7z, 7zFM, 7zG.
Ой ли?
PowerShell
1
2
PS E:\sandbox> (gi (gcm 7za).Definition).VersionInfo.FileVersion
15.12
Или есть версии новее?
Цитата Сообщение от CooperBel
и что предопределяет переменные: $Path и $Archive
Написано же - анонимная функция, а оные значения являются параметрами этой функции.
0
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 15
30.11.2015, 14:31  [ТС] 7
я ж почему и спрашиваю, так как вывод на данный код таков:
Код
gcm : Имя "7za" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правиль
ость написания имени, а также наличие и правильность пути, после чего повторите попытку.
E:\BackupUserFiles.ps1:65 знак:24
+ if (!(Test-Path ($$ = (gcm 7za).Definition))) {
+                        ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (7za:String) [Get-Command], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand

Test-Path : Не удается привязать аргумент к параметру "Path", так как он имеет значение NULL.
E:\BackupUserFiles.ps1:65 знак:17
+ if (!(Test-Path ($$ = (gcm 7za).Definition))) {
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCom
   mand

"7za" не является внутренней или внешней
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
30.11.2015, 16:16 8
CooperBel, так Вы укажите в PATH путь до, скажем, 7z.exe, например:
PowerShell
1
$env:path += ';C:\Program Files\7zip'
а в самом коде 7za змените на 7z, в чем проблема-то?
0
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 15
01.12.2015, 08:43  [ТС] 9
может я чего то не догоняю, или еще чего, все прописал, ошибок не выводит в исключения не вываливается, но и результата почему то тоже нет(((
0
01.12.2015, 08:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2015, 08:43
Помогаю со студенческими работами здесь

Нужен полный набор библиотек на wine-2.14 для установки заменой папок
Здравствуйте, может кто поделиться папкой ./wine с полным набором библиотек на wine-2.14, путем...

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

Забрать права у определенных пользователей для вложенных папок
Приветствую Вас, уважаемые участники форума. Есть такой батник: @echo off icacls "C:\temp"...

Как записать возвращаемую функцию получения определенных папок?
Получаю папку Temp, и хочу сделать возвращаемую функцию но не получается, как это сделать? const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru