Что нового

автоматическое добавление баз 1с в домене

millgan

Новичок
Сообщения
42
Репутация
2
:laugh:Версия AutoIt: 3.

Описание: Тема раскрыта тут: http://beliy.org.ua/skripti-na-autoit/avtomaticheskoe-podklyuchenie-baz-1s-v-ad.html

Код:
#include <AD.au3> ; библиотека для работы с АД
#include <Array.au3> ; библиотека для работы с массивами
 
$pathDB = @AppDataDir & '\1C\1CEStart\' ;путь куда должен записаться файл  ibases.v8i
 
; делаем бэкап файла. В дальнейшем рекомендуется отключить или периодически чистить старые бекапы во избания переполнения дискового пространства
If FileExists($pathDB & '\ibases.v8i') Then FileCopy($pathDB & '\ibases.v8i', $pathDB & "\backup\" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '\', 8)
 
; Открываем соединение к Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
 
Global $aProperties[1][2]
 
Global $aUser
$aUser = _AD_GetUserGroups(@UserName) ; парсим в каких группах находится пользователь
If $aUser[0] = 0 Then
        ConsoleWrite(@UserName & " group not found" & @CRLF)
 Else
        $file = FileOpen($pathDB & '\ibases.v8i', 138) ; открываем файл для записи в кодировке UTF-8 удалив содержимое текущего файла
       
        ; На всякий случай проверяем права на запись файла
   If $file = -1 Then
           ConsoleWrite("Error!!! Unable to open file." & @CRLF)
           Exit
   EndIf
 
        For $i = 1 to (UBound($aUser, 1) -1) Step 1 ; в цикле проверяем записи в всех группах пользователя
          Global $sGroup = _AD_FQDNToSamAccountName($aUser[$i])
          $aProperties = _AD_GetObjectProperties($sGroup)
          ;_ArrayDisplay($aProperties, "Свойства группы '" & $sGroup & "'") ; !!! информация для дебага
          $iIndex = _ArraySearch($aProperties, "info", 0, 0, 0, 1, 1, 0) ; ищем заметки в настройках группы
          If @error Then
                  ConsoleWrite("Error!!! Note INFO not found." & @CRLF)
          Else
                  ConsoleWrite($pathDB & "Найден в массиве в позиции "& $iIndex & ' Записано: ' & $aProperties[$iIndex][1] & @CRLF)
                  FileWrite($file, $aProperties[$iIndex][1])
                 
          EndIf
   Next ; конец цикла
   FileClose($file) ; закрываем ранее открытый файл
EndIf
 
; Закрываем соединение к Active Directory
_AD_Close()


Подскажите куда воткнуть еще одно условие на префикс комментария группы? допустим если комментарий начинается с "reg add" то выполнить всю запись как команду CMD
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: [Реестр] Помогите допилить скрипт

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


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

"[Реестр] Помогите допилить скрипт" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Глобальный модератор.









Предупреждение Оформите, пожалуйста, тему в соответствии с Правилами обязательного оформления тем в разделе "Стол заказов"

С уважением, ваш Глобальный модератор.
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
Итак универсальный скрипт для баз 1с (7.7 8.1 8.2 8.3)
Код:
#include <AD.au3> ; библиотека для работы с АД
#include <Array.au3> ; библиотека для работы с массивами
 
$pathDB = @AppDataDir & '\1C\1CEStart\' ;путь куда должен записаться файл  ibases.v8i
 
; делаем бэкап файла. В дальнейшем рекомендуется отключить или периодически чистить старые бекапы во избания переполнения дискового пространства
If FileExists($pathDB & '\ibases.v8i') Then FileCopy($pathDB & '\ibases.v8i', $pathDB & "\backup\" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '\', 8)
 
; Открываем соединение к Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
 
Global $aProperties[1][2]
 
Global $aUser
$aUser = _AD_GetUserGroups(@UserName) ; парсим в каких группах находится пользователь
If $aUser[0] = 0 Then
        ConsoleWrite(@UserName & " group not found" & @CRLF)
 Else
        $file = FileOpen($pathDB & '\ibases.v8i', 138) ; открываем файл для записи в кодировке UTF-8 удалив содержимое текущего файла
       
        ; На всякий случай проверяем права на запись файла
   If $file = -1 Then
           ConsoleWrite("Error!!! Unable to open file." & @CRLF)
           Exit
   EndIf
 
        For $i = 1 to (UBound($aUser, 1) -1) Step 1 ; в цикле проверяем записи в всех группах пользователя
          Global $sGroup = _AD_FQDNToSamAccountName($aUser[$i])
          $aProperties = _AD_GetObjectProperties($sGroup)
          ;_ArrayDisplay($aProperties, "Свойства группы '" & $sGroup & "'") ; !!! информация для дебага
          $iIndex = _ArraySearch($aProperties, "info", 0, 0, 0, 1, 1, 0) ; ищем заметки в настройках группы
          If @error Then
                  ConsoleWrite("Error!!! Note INFO not found." & @CRLF)
          Else
                  ConsoleWrite($pathDB & "Найден в массиве в позиции "& $iIndex & ' Записано: ' & $aProperties[$iIndex][1] & @CRLF)
                  FileWrite($file, $aProperties[$iIndex][1])
				  if StringRegExp($aProperties[$iIndex][1], '\\')  = 1 Then
					 $mass = StringSplit($aProperties[$iIndex][1], "#")
					 if $mass[0] = 2 then
						RegWrite("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles", $mass[1], "REG_SZ", $mass[2])
					 EndIf

				  EndIf
          EndIf
   Next ; конец цикла
   FileClose($file) ; закрываем ранее открытый файл
EndIf
 
; Закрываем соединение к Active Directory
_AD_Close()
 

beliy

Продвинутый
Сообщения
372
Репутация
72
2 millgan
Несколько замечаний:

Код:
FileWrite($file, $aProperties[$iIndex][1])
if StringRegExp($aProperties[$iIndex][1], '\\')  = 1 Then
        $mass = StringSplit($aProperties[$iIndex][1], "#")
        if $mass[0] = 2 then
               RegWrite("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles", $mass[1], "REG_SZ", $mass[2])
        EndIf

EndIf

[list type=decimal]
[*] В данном коде в ibases.v8i будут записаны все данные, включая те которые должны писаться в реестр для 1Cv7.
Варианты решения:
а) писать в файл после проверки. Как то так (не тестил):
Код:
if StringRegExp($aProperties[$iIndex][1], '\\')  = 1 Then
        $mass = StringSplit($aProperties[$iIndex][1], "#")
        if $mass[0] = 2 then
               RegWrite("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles", $mass[1], "REG_SZ", $mass[2])
        EndIf
Else
        FileWrite($file, $aProperties[$iIndex][1])
EndIf

б) использовать другое поле для хранения записей для 1Cv7
[*]символы "\\" и "#" могут присутствовать и в записях для 1Cv8 из-за чего в реестр могут писаться мусорные данные.
Варианты решения:
а) Всячески избегать использования символов "\\" и "#" для 1Cv8 (не универсально)
б) использовать более точный патерн для поиска
в) использовать другое поле для хранения записей для 1Cv7 (рекомендуется)
[/list]
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
СПС) поправил скрипт. Насчет "\\" - он встретиться в базах 8.х - если она файловая?! у нас все на скуле, так что такого символа встретится не может.
Кому интересно:
Код:
#include <AD.au3> ; библиотека для работы с АД
#include <Array.au3> ; библиотека для работы с массивами
 
$pathDB = @AppDataDir & '\1C\1CEStart\' ;путь куда должен записаться файл  ibases.v8i
 
; делаем бэкап файла. В дальнейшем рекомендуется отключить или периодически чистить старые бекапы во избания переполнения дискового пространства
If FileExists($pathDB & '\ibases.v8i') Then FileCopy($pathDB & '\ibases.v8i', $pathDB & "\backup\" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '\', 8)
 
; Открываем соединение к Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
 
Global $aProperties[1][2]
 
Global $aUser
$aUser = _AD_GetUserGroups(@UserName) ; парсим в каких группах находится пользователь
If $aUser[0] = 0 Then
        ConsoleWrite(@UserName & " group not found" & @CRLF)
 Else
        $file = FileOpen($pathDB & '\ibases.v8i', 138) ; открываем файл для записи в кодировке UTF-8 удалив содержимое текущего файла
       
        ; На всякий случай проверяем права на запись файла
   If $file = -1 Then
           ConsoleWrite("Error!!! Unable to open file." & @CRLF)
           Exit
   EndIf
 
        For $i = 1 to (UBound($aUser, 1) -1) Step 1 ; в цикле проверяем записи в всех группах пользователя
          Global $sGroup = _AD_FQDNToSamAccountName($aUser[$i])
          $aProperties = _AD_GetObjectProperties($sGroup)
          ;_ArrayDisplay($aProperties, "Свойства группы '" & $sGroup & "'") ; !!! информация для дебага
          $iIndex = _ArraySearch($aProperties, "info", 0, 0, 0, 1, 1, 0) ; ищем заметки в настройках группы
          If @error Then
                  ConsoleWrite("Error!!! Note INFO not found." & @CRLF)
          Else
                  ConsoleWrite($pathDB & "Найден в массиве в позиции "& $iIndex & ' Записано: ' & $aProperties[$iIndex][1] & @CRLF)
				  if StringRegExp($aProperties[$iIndex][1], '\\')  = 1 Then
					 $mass = StringSplit($aProperties[$iIndex][1], "#")
					 if $mass[0] = 2 then
						RegWrite("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles", $mass[1], "REG_SZ", $mass[2])
					 EndIf
				  Else 
					 FileWrite($file, $aProperties[$iIndex][1])
				  EndIf
          EndIf
   Next ; конец цикла
   FileClose($file) ; закрываем ранее открытый файл
EndIf
 
; Закрываем соединение к Active Directory
_AD_Close()
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Насчет "\\" - он встретиться в базах 8.х - если она файловая?! у нас все на скуле, так что такого символа встретится не может.
Решение относится к уже описанному выше варианту:

а) Всячески избегать использования символов "\\" и "#" для 1Cv8 (не универсально)
лично я стараюсь, по возможности, избегать такого подхода...
 
Верх