четверг, 15 августа 2013 г.

Автоматический запуск профиля пользователя на терминальном сервере.

В моей работе появилась необходимость автоматического запуска 1С со специальной обработкой на терминальном сервере.
Эту задачу можно выполнить в несколько этапов:

1. Создаем ярлык на терминальном сервере для запуска терминальной сессии от имени необходимого пользователя. 


2. Заданий несколько, и надо их запускать под разными пользователями, то задача усложняется. Запустить с разных ярлыков по одному адресу под разными пользователями не получится, придется дать конкретному серверу необходимое количество IP адресов (или обращаться к нему по имени :) ) .

3. Для пользователя, под которым будет запускать сеанс 1c с обработкой добавляем нужную строку:

"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /S "SERVER\Base" /N Admin /P password /RunModeOrdinaryApplication /Execute "C:\обработка.epf" 


4. Создаем bat файл для автозагрузки.

mstsc с:\UT.rdp

5. Добавляем в планировщик (при включении компьютера) созданный bat файл.


понедельник, 18 марта 2013 г.

Обновление конфигурации базы 1С из командной строки.

В продолжение предыдущего поста.
Следующая задача для меня встала: создание пакетного файла для обновления конфигурации нескольких баз 1С.

Запуск одной строкой обновления конфигурации и базы не получилось. Сделал это последовательно двумя строкими:

start "" /wait  "C:\Program Files\1cv82-eletech\8.2.14.528\bin\1cv8.exe" CONFIG /F F:\roznica /N adm /P 123 /UpdateCfg "D:\BASE Temlpates\1c\1c\Accounting\2_0_45_5\1cv8.cf" - обновление конфигурации
start "" /wait  "C:\Program Files\1cv82-eletech\8.2.14.528\bin\1cv8.exe" CONFIG /F F:\roznica /N adm /P 123 /UpdateDBCfg - обновление базы


Последовательность нескольких действий можно запустить одним bat файлом, например:

"D:\Distr 1C\update.bat" Base1




******************************************************************************

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

Эту задачу решил выполнять с помощью bat файла, в котором будет последовательный перебор названия баз из текстового файла.

for {%переменная|%%переменнаяin (множество) do команда [ПараметрыКоманднойСтроки]

Mifile.txt - файл названия баз.









Пример:
for /F "usebackq delims=;" %%i in ("D:\Distr 1C\Myfile.txt") do "D:\Distr 1C\update.bat" %%i



delims=xxxЗадает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.
usebackqЗадает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов. Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.



понедельник, 11 марта 2013 г.

Как выгрузить базу 1С при помощи командной строки.

В процессе работы появилась задача единовременно произвести выгрузку с нескольких баз 1С.
Единственным решением я посчитал - создание bat файла с ключами запуска 1С.
 И в него добавил следующее:

"C:\Program Files\1cv82-eletech\8.2.14.528\bin\1cv8.exe" CONFIG /F F:\roznica /N adm /P 123 /DumpIB E:\%date%-name.dt

Из выше написанного следует:

- C:\Program Files\1cv82\8.2.14.528\bin\1cv8.exe - этот запуск самого 1С
- CONFIG - в режиме конфигуратора
- /F - путь до файловой базы
- /N - имя пользователя, под которым разрешено выгружать базу
- /P - пароль пользователя
- E:\name.dt - куда выгружать базу


Далее переименовываем это файл с расширением .bat
В результате мы таким образом можем организовать бэкап и в конце получим файлы вида 18.01.2012-name.dt

Т.к. баз много запускать их одновременно будет неправильным, поэтому я воспользовался параметрами командной строки:

start "" /wait 

/wait
Запускает приложение с ожиданием окончания его работы.


Конечный вид содержимого bat файла следующий:


start "" /wait  "C:\Program Files\1cv82-eletech\8.2.14.528\bin\1cv8.exe" CONFIG /F F:\roznica /N adm /P 123 /DumpIB E:\%date%-name.dt


Выгрузки будут запускаться последовательно.


И можно вставлять в планировщик

среда, 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С стандартным образом подключаю Фискальный регистратор и Дисплей пользователя.