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


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

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

Активация KIS/KAV 2011 из консоли

Столкнулся с проблемой.
Нужна была активация Kaspersky Internet Security 2011. В окне активации дается возможность ввести только код. Но в интернете нашел только ключи, а не коды активации.

Нашел выход из ситуации - подключить ключ с помощью командной строки.
В открывшемся окне напишите если у Вас 32-разрядная версия ОС Windows, то пишите следующее: "%ProgramFiles%\Kaspersky Lab\Kaspersky Internet Security 2011\avp.com" addkey "c:\имя_ключа.key" если же у Вас 64-разрядная версия Windows, то пишите следующее: "%ProgramFiles%\Kaspersky Lab\Kaspersky Internet Security 2011\avp.com" addkey "c:\имя_ключа.key" Теперь нажмите клавишу Enter. Здесь "c:\имя_ключа.key" - полный путь и имя файла ключей Касперского. Если у Вас файл ключа лежит на диске D: и называется kis2011.key, то вместо "c:\имя_ключа.key" вы должны написать "D:\kis2011.key". Этот метод не дает 100% гарантии на активацию KIS 2011. После нажатия клавиши enter Вы должны убедиться, что ошибок нет. На рисунке видно, что команда правильно выполнилась лишь со второго раза.

Активация kis 2011 из консоли

вторник, 22 мая 2012 г.

Нахождение файла программных лицензий 1С

Недавно мой коллега ставил 1С платформу на Windows Server 2008 R2. Операционная система стоит на виртуальной машине, что в принципе к делу не относится. Предполагалось, что пользователи будут работать в файловой базе через терминал-сервер на данной машине.
Коллега сделал всё, как обычно, поставил многопользовательскую программную лицензию. Но к сожалению платформа продолжала запрашивать лицензию, даже под тем пользователем, под которым проводилась регистрация. Подключился к клиенту через удаленный доступ.

Почитали Техническую документацию: там нашли следующие пункты, относящиеся к нашему случаю.

9.2.3.8. Терминальный сервер

В данном случае возможны следующие варианты получения лицензий:
Однопользовательская программная лицензия
Обеспечивает запуск произвольного количества экземпляров системы в режиме 1С:Предприятие или Конфигуратор от лица одной терминальной сессии.
Программные лицензии (как однопользовательские, так и многопользовательские), активированные для терминального сервера, складываются в том случае, если файлы с лицензиями доступны всем пользователям терминального сервера.
Многопользовательская программная лицензия
Многопользовательская программная лицензия может быть активирована для терминального сервера и использоваться как для файлового, так и для клиент-серверного варианта системы. В этом случае обеспечивается запуск произвольного количества экземпляров системы в режиме 1С:Предприятие или Конфигуратор для такого количества одновременных подключений к терминальному серверу (терминальных сессий), на сколько пользователей активирована многопользовательская программная лицензия.
Программные лицензии (как однопользовательские, так и многопользовательские), активированные для терминального сервера, складываются в том случае, если файлы с лицензиями доступны всем пользователям терминального сервера.


9.2.5. Расположение файлов с программными лицензиями


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

9.2.5.1. Для ОС Windows


В ОС Windows файлы программных лицензий могут располагаться в следующих каталогах (каталоги перечислены в порядке поиска, после нахождения файлов лицензий дальнейший поиск прекращается):
● каталог конфигурационных файлов конкретной версии платформы. По умолчанию – C:\Program Files\1Cv82\8.2.XX.YYY\bin\conf
● каталог %USERPROFILE%\Local Settings\Application Data\1C\1Cv82\Conf (%LOCALAPPDATA%\1C\1Cv82\Conf для ОС Windows Vista и старше) пользователя, от имени которого работает система; 
● каталог, который указан в файле conf.cfg, расположенном в каталоге bin\conf конкретной версии. 
● каталог %ALLUSERSPROFILE%\Local Settings\Application Data\1C\1Cv82\Conf (%ProgramData%\1C\1Cv82\Conf для ОС Windows Vista и старше) данных для всех пользователей компьютера.

Но по этим путям найти файлы не удалось. Решил воспользоваться обычным поиском. В результате файлы лицензий нашлись, но ... в c:\Windows\System32 ... 
Как они туда попали не знаю, может быть их туда от безысходности перенес местный админ.

-----------------------------------------------------------------------------------------------------

Оказалось в документации не учитывалась установка на Windows Server 2008 R2. 
Файл лицензии в этом случае должен находиться в c:\ProgramData\1C\1Cv82\conf . После переноса файла туда платформа 1С заработала с регистрацией.

понедельник, 21 мая 2012 г.

Начало.

Здесь буду вести записи по работе системного администратора. Часто сталкиваюсь с различными сложностями в своей работе, нахожу решения проблем, но со временем события выветриваются. Чтобы сохранить полезную информацию, надо её записывать. Собственно, это и есть основная функция данного блога.