среда, 26 декабря 2012 г.

Простейший backup на основе WinRAR, WSH скриптов и Планировщика задач Windows


Как будет работать бэкап

Итак, мне требуется:
  • Хранить бэкап за каждый день в виде архивного файла
  • Каждый файл должен создаваться с уникальным именем (в идеале включать дату создания в имя файла)
  • Процесс создания бэкапа должен проходить в автоматическом режиме
  • Файлы старше 1 недели должны автоматически удаляться
Архивацией будет заниматься WinRAR, он же будет автоматически именовать файлы. Определять возраст и удалять старые файлы будет скрипт (VBScript), а автоматизировать все я буду с помощью встроенного Планировщика Windows.

Скрипты

Основу скриптов составляют процедуры из книги Джесси Торреса "Скрипты для администратора Windows" (а конкретно из главы 3 "Обслуживание файлов"). Они были дополнены мной для реализации моих задач.
Вот какие функции нам понадобятся (привожу код целиком): 
' ---------- 
' Начало основной секции. Отсюда начнется выполнение при запуске скрипта. 
Set FSO = CreateObject("Scripting.FileSystemObject")
' директория, где будут храниться бэкапы. Вы должны вписать свою директорию
' вместо "X:\DailyBackup"
sDir = "X:\DailyBackup"
Set objDir = GetFolder(sDir)
DeleteOlderFiles(objDir)

' ---------- Секция функций

' Получить файл
Function GetFile(sFile)
 On Error Resume Next
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set GetFile = FSO.GetFile(sFile)
 if err.number <> 0 then
 WScript.Echo "Error Opening file " & sFile & VBlf & "["&Err.Description&"]"
 Wscript.Quit Err.number
 end if
End Function 

' Получить папку
Function GetFolder (sFolder)
 On Error Resume Next
 
 Set GetFolder = FSO.GetFolder(sFolder)
 if err.number <> 0 then
 WScript.Echo "Error Opening folder " & sFolder & VBlf & "["&Err.Description&"]"
 Wscript.Quit Err.number
 end if
End Function 

' удалить один файл (имя файла передается в sFile)
Sub DeleteFile(sFile)
 On Error Resume Next

 FSO.DeleteFile sFile, True
 if err.number <> 0 then
 WScript.Echo "Error Deleteing file " & sFile & VBlf & "["&Err.Description&"]"
 Wscript.Quit Err.number
 end if
End Sub 

' Удалить файлы старше 7 дней
Sub DeleteOlderFiles(objDir)
    ' просматриваем все файлы в директории
 for each efile in objDir.Files  
  ' используем DateLastModified, а не DateCreated, поскольку
  ' DateCreated не всегда возвращает правильную дату
  FileDate = efile.DateLastModified 
  Age = DateDiff("d",Now,FileDate)  
  ' в данном случае возраст файла не больше семи дней
  If Abs(Age)>7 Then 
   DeleteFile(efile)
  End If  
 next 
End Sub          
Этот код помещаем в файл remove_old_backups.vbs.

Командная строка WinRAR

Архиватор WinRAR обладает мощной поддержкой командной строки. В частности, он может формировать имя файла на основе пользовательского шаблона, включая в него разную служебную информацию, например, дату. Что нам, собственно говоря, и требуется. Кроме того, он умеет работать со списком файлов или директорий на архивацию, что сильно облегчает редактирование командного файла.
Я использую следующую командную строку для архивирования (прописана в файле make_daily.bat):
"c:\program files\winrar\winrar.exe" a -s -r -rr10p -dh -ed -m3 -ilogC:\DailyBackupScript\dailybackup.log -ag+YYYYMMDD X:\DailyBackup\backup
Разберем ее по составляющим:
  • "c:\program files\winrar\winrar.exe" - путь к WinRAR-у
  • a - команда на добавление файлов
  • -s - режим сжатия "solid"
  • -r - с поддиректориями
  • -rr10p - на всякий случай добавляем информацию для восстановления (-rr), в количестве 10% (10p)
  • -dh - открывать шареные фалы. Полезно, если кто-нибудь засиделся до 12 ночи, и редактирует файл, который должен уйти в бэкап
  • -ed - не добавлять пустые директории
  • -m3 - степень сжатия 3 
  • -ilogC:\DailyBackupScript\dailybackup.log - вести лог (-ilog) и записывать его в "C:\DailyBackupScript\dailybackup.log"
  • -ag+YYYYMMDD X:\DailyBackup\backup - формировать имя файла, прибавляя в начало текущий год, месяц и число. Имя файла будет иметь примерно такой вид: 20060927backup.rar
  •  X:\DailyBackup\backup - папка, куда писать бэкапы и имя бэкапа (к которому в начало дописываются год, месяц, число)

Командные файлы

Вся работа по созданию бэкапа строится на основе командных файлов (.bat-файлов). У меня их два:
  • make_daily.bat - содержит команды для создания архивного файла или файлов.
  • backup_task.bat - выполняет следующие действия:
    • вызывает интерпретатор скриптов cscript и передают ему на выполнение скрипт, удаляющий старые файлы.
    • вызывает make_daily.bat и передает ему в качестве параметра либо папку, которую надо архивировать, либо файл-список (в котором несколько папок на архивацию).
  • В свою очередь,  backup_task.bat вызывается Планировщиком Windows в назначенное время
Содержимое файла make_daily.bat (в одну строку):
@"c:\program files\winrar\winrar.exe" a -s -r -rr10p -dh -ed -m3 -ilogC:\DailyBackupScript\dailybackup.log -ag+YYYYMMDD X:\DailyBackup\backup %1
Содержимое файла backup_task.bat:
@cscript remove_old_backups.vbs
call make_daily.bat @backup.lst
Для работы также необходимо создать файл backup.lst (обычный текстовый файл). Он должен содержать список директорий, которые включаются в бэкап. Каждая директория должна располагаться на отдельной строчке, например, так:
c:\Projects
c:\VeryImportantProjects
c:\Folder Name With Spaces\SubFolder
Обратите внимание, что имя директории-источника, содержащее пробелы, не обязательно заключать в кавычки, если вы пользуетесь файл-списком. Если же вы передаёте его напрямую, то кавычки обязательны. Не ставьте завершающий слэш - WinRAR этого не поймёт.

четверг, 6 декабря 2012 г.

Импорт почтовых сообщений из Thunderbird в Outlook


Перенос почты из Mozilla ThunderBird в MS Outlook Express и MS Outlook


В Thunderbird не нашёл возможность экспорта всех/выбранных сообщений, а по одному сохранять сотни или тысячи сообщений как минимум не разумно. Поэтому я воспользовался первой же найденной программой — IMAPSize (есть дистрибутив не требующий установки) — которая смогла сконвертировать ящики Thunderbird в eml файлы. Создана она не для этого, но есть у неё такая функция.



1. Запустите IMAPSize и откажитесь от предложения создать аккаунт.


Нажмите "No"

2. Tools > mbox2eml




3. Кликните кнопку "Select mbox files to convert", в Files of type выберите All files (*.*), т.к. файлы Thunderbird не имеют расширений:



4. Перейдите в директорию с файлами Thunderbird для нужного вам аккаунта.
Скорее всего в C:\Documents and Settings\Имя_Пользователя\Application Data\Thunderbird\Profiles\Something.default\Mail\mail.ВАШ_ДОМЕН.com

5. Удерживая Ctrl, или по одному, выберите файлы — "ящики" без расширений которые будете переносить (Inboх, Sent, …)

6. В "Select destination folder" выберите директорию в которой временно сохраните eml файлы. Обязательно добавьте \ (бэкслэш) в конце!

Эта программа автоматически создаст отдельные директории для каждого выбранного ящика, и в них сохранит сообщения в EML. Например, если здесь укажите C:\Temp\Eml\, и выберите Inbox и Sent, то после конвертации у вас появятся C:\Temp\Eml\Inbox и C:\Temp\Eml\Sent с EML файлами.



EML к PST преобразования EML для Outlook 

Следующий этап - импортировать сообщения eml в pst файл.
Для этого можно использовать программу EML к PST Converter.


вторник, 4 декабря 2012 г.

Добавление в учетную запись права «Вход в качестве службы»

Чтобы добавить в учетную запись локального компьютера право «Вход в качестве службы»

  1. Откройте локальную политику безопасности.
  2. В дереве консоли дважды щелкните узел Локальные политики, затем выберите Назначения прав пользователя.
  3. В области сведений дважды щелкните Вход в качестве службы.
  4. Щелкните Добавить пользователя или группу, а затем добавьте соответствующую учетную запись в список учетных записей, которые обладают правом Вход в качестве службы.
Чтобы добавить в учетную запись право «Вход в качестве службы» для объекта групповой политики при работе на рабочей станции или сервере, подключенном к домену.
  1. Нажмите кнопку Пуск, выберите команду Выполнить, введите mmc, а затем нажмите кнопку ОК.
  2. В меню Файл выберите Добавить или удалить оснастку.
  3. В диалоговом окне Добавить или удалить оснастку нажмите кнопку Добавить и в диалоговом окне Добавить изолированную оснастку дважды щелкните элемент Редактор объекта групповой политики.
  4. В диалоговом окне Выбор объекта групповой политики нажмите кнопку Обзор, найдите объект групповой политики (GPO), который необходимо изменить, нажмите кнопку ОК, а затем кнопку Готово.
  5. Нажмите кнопку Закрыть, а затем кнопку ОК.
  6. В дереве консоли щелкните узел Назначение прав пользователей.
    Где?
    • Объект_групповой_политики [Имя_компьютера] Policy
    • Конфигурация предприятия
    • Параметры Windows
    • Параметры безопасности
    • Локальные политики
    • Назначения прав пользователя
  7. В области сведений дважды щелкните Вход в качестве службы.
  8. Если параметры безопасности еще не были определены, установите флажок Определить следующие параметры политики.
  9. Щелкните Добавить пользователя или группу, а затем добавьте соответствующую учетную запись в список учетных записей, которые обладают правом Вход в качестве службы.
Чтобы добавить в учетную запись право «Вход в качестве службы» для объекта групповой политики с контроллера домена или с компьютера или с установленным пакетом средств администрирования Windows Server 2003
  1. Откройте оснастку «Active Directory - пользователи и компьютеры».
  2. В дереве консоли щелкните правой кнопкой мыши домен или подразделение, для которых требуется изменить параметры безопасности.
  3. Выберите команду Свойства и откройте вкладку Групповая политика.
  4. В списке Связи объектов групповой политики щелкните объект групповой политики для домена или подразделения, для которых требуется изменить параметры безопасности, и нажмите кнопку Изменить.
  5. В дереве консоли щелкните узел Назначение прав пользователей.
    Где?
    • Объект_групповой_политики [Имя_компьютера] Policy
    • Конфигурация предприятия
    • Параметры Windows
    • Параметры безопасности
    • Локальные политики
    • Назначения прав пользователя
  6. В области сведений дважды щелкните Вход в качестве службы.
  7. Если эти параметры безопасности еще не определены, установите флажок Определить следующие параметры политики.
  8. Щелкните Добавить пользователя или группу, а затем добавьте соответствующую учетную запись в список учетных записей, которые обладают правом Вход в качестве службы.
Чтобы с контроллера домена добавить право «Вход в качестве службы» в учетную запись только для контроллеров домена
  1. Откройте оснастку Политика безопасности контроллера домена.
  2. В дереве консоли щелкните узел Назначение прав пользователей.
    Где?
    • Параметры безопасности
    • Локальные политики
    • Назначения прав пользователя
  3. В области сведений дважды щелкните Вход в качестве службы.
  4. Если эти параметры безопасности еще не определены, установите флажок Определить следующие параметры политики.
  5. Щелкните Добавить пользователя или группу, а затем добавьте соответствующую учетную запись в список учетных записей, которые обладают правом Вход в качестве службы.
Примечания
  • To open Чтобы открыть оснастку Локальная политика безопасности, нажмите кнопку Пуск и последовательно укажите пункты Панель управления и Администрирование, а затем дважды щелкните значок Локальная политика безопасности.
  • Чтобы открыть оснастку Политика безопасности контроллера домена, нажмите кнопку Пуск и последовательно укажите пункты Все программы и Администрирование, а затем выберите Политика безопасности контроллера домена.
  • После того, как будет изменен параметр безопасности, это изменение вступит в силу при следующем обновлении параметров.
  • Параметры безопасности обновляются каждые 90 минут на рабочей станции или сервере и каждые 5 минут на контроллере домена. Кроме того, независимо от наличия изменений, эти параметры обновляются каждые 16 часов.
Оригинал: http://technet.microsoft.com/ru-ru/library/cc739424(v=ws.10).aspx