среда, 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

четверг, 29 ноября 2012 г.

Подключение торгового оборудования к 1С через удаленный рабочий стол на терминал сервер.

Была поставлена задача подключить несколько рабочих станций к одному терминальному серверу, чтобы пользователи могли работать в одной базе. Но сложность заключалась в том, что к рабочим станциям подключается торговое оборудование и работат оно должно, тоже через терминал сервер, как будно оно физически подключено к нему.

Торговое оборудование:
1. Фискальный регистратор Штрих-М-ФР-К (USB).
2. Дисплей покупателя Posua LPOS-VFD 2029D (USB).

Оба USB. Первая мысль ничего не получится.
Но я начал разбираться.

1. В комплекте с фискальным регистратором шел кабель LPT -> USB и драйвер к нему, в результате система определила подключение регистратора через виртуальный COM порт COM4.
2. Поставил драйвера дисплея пользователя, которые были в комплекте.
3. Установил приложение MPOS-Master.
4. Выбрал свое устройство
5. Выбрал Параметры интерфейса.
6. Выбираем Эмуляция COM
7. Далее нажимаем Устройства=>Загрузить проект или Ctrl+U для того чтобы передать измененную конфигурацию в дисплей. Закрываем приложение. 

Появилось новое устройство на COM5.



После этого начинаю работу с сервером удаленных рабочих столов.

8. Настраиваю соединение с компьютера, к которому подключено оборудование.
Ставим галочку Порты.
9. Стандартным образом подключаюсь к Удаленному рабочему столу (терминальному серверу).
10. Проверяю, что COM порты проброшены на сервер.
11. Устанавливаю с диска драйвер 1С для Дисплей покупателя Posua LPOS-VFD 2029D.

12. И уже непосредственно с 1С стандартным образом подключаю Фискальный регистратор и Дисплей пользователя.



вторник, 9 октября 2012 г.

Сервис синхронизации времени

Если не устраивает сервер  синхронизации времени, прописанный по умолчанию, то можно воспользоваться сторонним сервисом: http://www.pool.ntp.org/ru/ .

Синхронизация времени в домене при участии Hyper-V

Делаю перепост записи, которая мне помогла.

ссылка: http://www.inadmin.ru/2010/06/23/ntp-hyper-v-synctime/

Интересную ситуацию наблюдал сегодня на тестовом стенде с синхронизацией времени. Ситуация была такова, что VM машины брали время с хостового сервера Hyper-V, который был в том же в домене. При этом DC был виртуальной машиной.

Топология была следующей:




На хостовом сервере, а именно на сервере Hyper-V, было установлено неправильное время (отклонение на 4 минуты от общепринятого).

Не долго думая, решил настроить правильное, для этого на DC с ролью PDC решил настроить синхронизацию с внешним источником. Для этого выполнил несколько последующих пунктов:
  1. Запускаем RegEdit
  2. Находим ключ 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer
его значение и будем менять, для изменения NTP сервера в интернете. Я поставил: 0.pool.ntp.org,0×1 (именно так, с 0×1 на конце)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type
Должно иметь значение NTP
HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags
должно иметь значение 5
После этого останавливаем и запускаем сервис времени:
net stop w32time && net start w32time
Запускаем синхронизацию: w32tm /resync /rediscover


После выполнения данных команд, время было синхронизировано. Все отлично, но вот беда через 30 секунд оно вернулось опять на неправильное.

Наверное, вы уже догадались, что время было взято с сервера Hyper-V. Лечится это довольно просто:
  1. Открываем оснастку Hyper-V Manager
  2. Выбираем нашу виртуалку с DC
  3. Заходим в Settings и переходим на Integration Services
  4. Отключаем синхронизацию времени


Теперь же все будет нормально синхронизироваться. Вся проблемы скрывалась в том, что сама хостовая машина с Hyper-V должна была брать время с контроллеров домена, которые были виртуальными машинами. В результате получалось, что хостовая машина не успевала синхронизировать время с контроллера домена. А в этот момент службы интеграции (integration services) замечали, что время расинхронизировалось (в данном случае, на VM с контроллером домена и ролью PDC) и было принято решение взять время с сервера Hyper-V. Таким образом получался замкнутый круг.

пятница, 22 июня 2012 г.

Восстановление загрузки windows server 2008 r2

Я хотел backup windows 2008 сделать акронисом. После архивации при загрузке стала выходить следующая ошибка:


Не удалось запустить Windows. Возможно. это произошло из-за недавнего изменения конфигурации оборудования или программного обеспечения.
...
Файл: \Windows\system32\winload.exe
Состояние: 0хc000000e
Сведения: Не удалось загрузить выбранную запись, поскольку приложение отсутствует или повреждено. 


Дистрибутив server 2008 сам не имеет удобных средств восстановления. С загрузочного диска Windows 7 corp не загрузилось (синий экран). 


Помогло следующее:


В средствах восстановления загрузил командную строку и набрал там 
X:\Sources>cd Recovery 
X:\Sources\Recovery>StartRep.exe


После этого запустилась утилита восстановления загрузки.