![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Резервное копирование |
|
VBS/WSH/JS - [решено] Резервное копирование
|
Новый участник Сообщения: 10 |
Скрипт проверяет наличие файла бекапа SQL в папке архивирует его в архив с помощью rar с добавление даты в имя архива. Затем копирует архив на удаленный сервер. И удаляет старые архивы с локального и удаленного сервера. Т.к. архивируется с пошью rar в скрипте реализовано вычисление задержки в зависимости от размера файла. Все действия ведуться в логах. В конце отправляется писмьо на заданный адрес с вложенным логом с помощью blat.
**************************************************************************** '========================================================================== ' ' VBScript Copy Backup folder ' ' NAME: CopBackFold.vbs ' ' AUTHOR: Alexey Petrov ' DATE : 20/01/2011 ' Version 2.0.1 '========================================================================== Option Explicit 'On Error Resume Next Const OverWriteFiles = True Dim sFolder, dFolder Dim rDate, oldDaterm, oldDate Dim objFSO, objTxtFile Dim Arg, FileName 'Переменные логов Dim LogFile, objOutputFile 'Переменные отправки почты Dim subj, body, cons, Sleep Dim WShell Dim Year, Month, Day, oldFile, oldDateLoc Dim sFile, ArrBase(), flBase, intSize, fold, Folder, file Dim strNextLine, status, iDir flBase = "H:\script\Backup_Base.txt" intSize = 0 Set WShell=CreateObject("WScript.Shell") Set objFSO = CreateObject ("scripting.fileSystemObject") 'Подключение к объект oldDateloc = Time() Set objTxtFile = objFSO.OpenTextFile(flBase, 1) 'Подключение объектов Set Arg = WScript.Arguments.Named 'Проверка аргументов 'Присвоение пути копирования If Arg.Exists("source") Then 'Значение первого аргумента sFolder = Arg("source") Else sFolder = "H:\SQL_BACKUP\" End If If Arg.Exists("dest") Then 'Значение второго аргумента dFolder = Arg("dest") Else dFolder = "\\Tr1\SQL_BACKUP\everyday\Back_" &rDate &"\" objFSO.CreateFolder(dFolder) End If If Arg.Exists("help") Xor Arg.Exists("h") Then 'Значение третьего аргумента WScript.Echo("Cкрипт для копирования бекапов, и хранения определенного количества архивов"+ vbCrLf + vbCrLf) WScript.Echo("Атрибуты:" + vbCrLf + vbCrLf + "/source:папка-источчник" + vbCrLf + "/dest:папка-приемник") WScript.Quit 1 End If 'Пишем лог. if objFSO.FolderExists(sFolder) Then LogFile = "H:\log\log-" &rDate & ".log" 'создаем файл Set objOutputFile = objFSO.CreateTextFile(LogFile, TRUE) if objFSO.FolderExists(dFolder) Then Else WScript.Echo("Папка " & dFolder & " не существует!!!!!!!"+ vbCrLf) objOutputFile.WriteLine("Папка " & dFolder & " не существует!!!!!!!"+ vbCrLf) 'в логи body = CHR(34) &"Папка " & dFolder & " не существует!!!!!!!" &CHR(34)'Текст сообщения objOutputFile.Close Email WScript.Quit 1 End if Else WScript.Echo("Папка " & sFolder & " не существует!!!!!!!"+ vbCrLf) body = CHR(34) &"Папка " & sFolder & " не существует!!!!!!!" &CHR(34) 'Текст сообщения Email WScript.Quit 1 End if WScript.Echo("Источник:" &sFolder ) 'на экран objOutputFile.WriteLine("Источник:" &sFolder ) 'в логи WScript.Echo("Приемник:" &dFolder ) objOutputFile.WriteLine("Приемник:" &dFolder ) WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 'Удалнение старых бекапов на Tr1 WScript.Echo("Удалнение старых бекапов на Tr1.....") objOutputFile.WriteLine("Удалнение старых бекапов на Tr1.....") WScript.Echo("=============================================="+ vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf) If objFSO.FolderExists("\\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm) Then 'Проверка на существование WScript.Echo("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" существует и бедет удалена") objOutputFile.WriteLine("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" существует и бедет удалена") objFSO.deleteFolder ("\\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm) WScript.Echo("Папка удалена!") objOutputFile.WriteLine("Папка удалена!") WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) Else WScript.Echo("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" не существует!") objOutputFile.WriteLine("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" не существует!") WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) End If WScript.Echo("Ежедневное Копирование бекапов на Tr1.....") objOutputFile.WriteLine("Ежедневное Копирование бекапов на Tr1.....") WScript.Echo("=============================================="+ vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf) Do Until objTxtFile.AtEndofStream strNextLine = objTxtFile.Readline ReDim Preserve ArrBase(intSize) ArrBase(intSize) = strNextLine intSize = intSize + 1 Loop Dim i For i = 1 To UBound(ArrBase) sFile = "H:\SQL_BACKUP\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &Year &"_" &Month &"_" &Day &".rar" oldFile = "H:\SQL_BACKUP\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &oldDateLoc &".rar" dFolder = "\\Tr1\SQL_BACKUP\everyday\Back_" &rDate &"\" &ArrBase(i) &"\" iDir = "H:\SQL_BACKUP\" &ArrBase(i) objFSO.CreateFolder(dFolder) FileName = ChackFile (iDir, ArrBase(i)) if status = 1 Then arch WScript.Echo("База " &ArrBase(i) &" за архивирована."+ vbCrLf) objOutputFile.WriteLine("База " &ArrBase(i) &" за архивирована."+ vbCrLf) Else WScript.Echo("Файл базы " &ArrBase(i) &" отсутствует."+ vbCrLf) objOutputFile.WriteLine("Файл базы " &ArrBase(i) &" отсутствует."+ vbCrLf) End if if objFSO.FileExists (sFile) Then CopyFile WScript.Echo("Файл " &sFile &" перемещен... "+ vbCrLf ) objOutputFile.WriteLine("Файл " &sFile &" перемещен... "+ vbCrLf) Else WScript.Echo("Файл " &sFile &" отсутствует!!! "+ vbCrLf ) objOutputFile.WriteLine("Файл " &sFile &" отсутствует!!! "+ vbCrLf) End if DelFile Next 'Закрытие файла логов objOutputFile.Close 'Удаление старых логов if objFSO.FileExists("H:\log\log-" & oldDaterm & ".log") Then objFSO.deleteFile ("H:\log\log-" & oldDaterm & ".log") End if WrDate 'objFSO.deleteFolder ("H:\SQL_BACKUP\BP81") body = CHR(34) &"Ежедневное копирование бекапов успешно выполнено!!!!" &CHR(34) Email 'Отправка письма Sub Email subj = CHR(34) &"Backup_1C_SQl" &CHR(34) cons = "-charset windows-1251 -to info@mail.ru -subject " &subj &" -body "&body &" -attach " &LogFile WShell.Run("H:\script\blat.exe " &cons ) End Sub ' копирование ежедневных бекапов на Tr1... Sub CopyFile WScript.Echo("Перемещение " &sFile &" на Tr1... " &Now) objOutputFile.WriteLine("Перемещение " &sFile &" на Tr1... " &Now) objFSO.CopyFile sFile, dFolder End Sub 'Полное копирование на Tr1... Sub CopyFolder WScript.Echo("Копирование бекапов на Tr1.....") objOutputFile.WriteLine("Копирование бекапов на Tr1.....") WScript.Echo("=============================================="+ vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf) If objFSO.FolderExists(dFolder) Then WScript.Echo("Перемещение бекапов на Tr1... " &Now) objOutputFile.WriteLine("Перемещение бекапов на Tr1... " &Now) objFSO.CopyFolder sFolder, dFolder , OverWriteFiles 'Копирование каталогов WScript.Echo("Бекапы перенесены на Tr1 успешно!!! " & Now) objOutputFile.WriteLine("Бекапы перенесены на Tr1 успешно!!! " & Now) WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) Else WScript.Echo("Папка " & dFolder &" не существует! Данный не перенесены!!") objOutputFile.WriteLine("Папка " & dFolder &" не существует! Данный не перенесены!!") WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) End If End Sub Sub arch WScript.Echo("==================Архивация базы " &ArrBase(i) &"...==================================="+ vbCrLf) objOutputFile.WriteLine("==================Архивация базы " &ArrBase(i) &"...==================================="+ vbCrLf) WShell.Run("H:\script\rar m H:\SQL_Backup\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &" -agyyyy_mm_dd -m5 -rr -idcp H:\SQL_Backup\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &Year &"_" &Month &"_" &Day &"*.bak ") Sleep = TimeSleep (iDir, FileName) WScript.Sleep(Sleep) End sub Sub DelFile WScript.Echo("Удалнение старых бекапов локально.....") objOutputFile.WriteLine("Удалнение старых бекапов на локально.....") WScript.Echo("=============================================="+ vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf) If objFSO.FileExists(oldFile) Then 'Проверка на существование WScript.Echo("Файл " & oldFile &" существует и бедет удален") objOutputFile.WriteLine("Файл " & oldFile &" существует и бедет удален") objFSO.deleteFile(oldFile) WScript.Echo("Файл удален!") objOutputFile.WriteLine("Файл удален!") WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) Else WScript.Echo("Файл " & oldFile &" не существует!") objOutputFile.WriteLine("Файл " & oldFile &" не существует!") WScript.Echo("=============================================="+ vbCrLf + vbCrLf) objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) End If End Sub Function Time() Year = DatePart("yyyy", Now) if DatePart("m", Now) < 10 Then Month = 0 &DatePart("m", Now) Else Month = DatePart("m", Now) End if if DatePart("d", Now) < 10 Then Day = 0 &DatePart("d", Now) Else Day = DatePart("d", Now) End if rDate = Day &"-" &Month &"-" &Year 'Дата старого архива удаленно Dim oldDayrm, oldMonthrm, oldYearrm oldDayrm = Day oldMonthrm = Month oldYearrm = Year if (oldDayrm < 31) then if ( oldMonthrm = 01 or 04 or 06 or 08 or 09 or 11) Then oldDayrm = 31 - (30 - oldDayrm) if oldMonthrm = 01 Then oldMonthrm = 12 oldYearrm = oldYearrm - 1 End if if oldMonthrm = 11 then oldMonthrm = oldMonthrm - 1 Else oldMonthrm = "0" &(oldMonthrm - 1) End if Elseif (oldMonthrm = 03) Then if oldDayrm > 3 Then oldDayrm = 59 - (30 - oldDayrm) oldMonthrm = oldMonthrm - 2 Else ldDayrm = 28 - (30 - oldDayrm) oldMonthrm = oldMonthrm - 1 End if Else oldDayrm = 30 - (30 - oldDayrm) if oldMonthrm = 12 then oldMonthrm = oldMonthrm - 1 Else oldMonthrm = "0" &(oldMonthrm - 1) End If End if End if 'Дата старого архива локально Dim oldDay, oldMonth, oldYear oldDay = Day oldMonth = Month oldYear = Year if (oldDay < 8) then if ( oldMonth = 01 or 04 or 06 or 08 or 09 or 11) Then oldDay = 31 - (7 - oldDay) if (oldMonth = 01) Then oldMonth = 12 oldYear = oldYear - 1 End if if oldMonth = 11 then oldMonth = oldMonth - 1 Else oldMonth = "0" &(oldMonth - 1) End If Elseif (oldMonth = 03) Then oldDay = 28 - (7 - oldDay) oldMonth = "0" &(oldMonth - 1) Else oldDay = 30 - (7 - oldDay) if oldMonth = 12 then oldMonth = oldMonth - 1 Else oldMonth = "0" &(oldMonth - 1) End If End if End if Time = oldYear &"-" &oldMonth &"-" &oldDay End Function sub WrDate Dim objFileDate set objFileDate = objFSO.CreateTextFile("LastBackDay.txt", TRUE) objFileDate.WriteLine(Day) objFileDate.WriteLine(Month) objFileDate.WriteLine(Year) objFileDate.Close End sub Function ChackFile (iDir, BaseName) Dim Files, Maska, Re Set Files = objFSO.GetFolder(iDir).Files Maska = "^" &BaseName &"_backup_" &Year &"_" &Month &"_" &Day &"_......_.......\.bak$" status = 0 Set Re = New RegExp Re.Pattern = Maska Re.IgnoreCase = True For Each File In Files If Re.Test(File.Name) Then ChackFile = File.Name status = 1 end if Next End Function 'Вычисление время задержки Function TimeSleep (iDir, FileName) Dim objFile, Target, FileSize Target = iDir &"\" & FileName Set objFile = objFSO.GetFile(target) FileSize = objFile.Size If FileSize < 300000000 Then TimeSleep = 300000 ElseIf FileSize < 100000000 Then TimeSleep = 1800000 ElseIf FileSize < 5000000000 Then TimeSleep = 3600000 ElseIf FileSize < 10000000000 Then TimeSleep = 7200000 ElseIf FileSize < 30000000000 Then TimeSleep = 10800000 ElseIf FileSize < 80000000000 Then TimeSleep = 14400000 Else TimeSleep = 18000000 End if End function |
|
Отправлено: 13:31, 20-01-2011 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать у меня крутится примерно такой же скрипт, только батник...
вот только не понял: зачем задержка, если у метода Run есть параметр (3-й по счету), который отвечает за ожидание завершения? Run Method (Windows Script Host) |
Отправлено: 05:32, 21-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать amel27, Спасибо упустил этот момент.
|
Отправлено: 06:37, 21-01-2011 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2008 R2 - Резервное копирование | legionkg | Windows Server 2008/2008 R2 | 13 | 04-10-2018 09:10 | |
HDD - Резервное копирование | zdughi | Накопители (SSD, HDD, USB Flash) | 7 | 15-06-2009 07:36 | |
Debian/Ubuntu - Резервное копирование. | Tankistspb | Общий по Linux | 2 | 25-02-2008 11:56 | |
Резервное копирование!! | Forest_G | Хочу все знать | 2 | 09-06-2006 17:36 | |
Резервное копирование | dimon55 | Хочу все знать | 1 | 01-08-2003 23:55 |
|