Доступ к отчетам открывается через доменные группы, и админам
DBA постоянно приходится работать и в Active Directory – создавать\удалять группы,
добавлять\удалять пользователей из этих групп и тд. Для работы в AD есть специальные командлеты Quest AD CMDlets, http://wiki.powergui.org/index.php/QAD_cmdlets_reference,
дополнения к PowerShell, которые находятся в свободном доступе http://www.quest.com/powershell/activeroles-server.aspx.
При помощи этих
командлетов упрощаются такие сис.админские кропотливые работы как массовое
создание групп, добавление пользователей в определенные группы и т.д. Например,
написала небольшой скриптик, который синхронизирует группы в разных доменах.
Задача становится актуальной, когда сервер отчетности находится в одном домене,
а пользователи в других доменах
Заранее создала таблицу в SQLServer, которая уже содержит названия групп,
которые надо синхронизировать
CREATE TABLE
[dbo].[Admins_plan](
[Group_domain_from]
[varchar](50) NOT NULL,
[Group_domain_to]
[nvarchar](50) NOT NULL,
[Town]
[varchar](50) NOT NULL,
[E_mail]
[varchar](200) NOT NULL
) ON [PRIMARY]
Group_domain_from – Доменная группа – источник
Group_domain_to- Доменная группа - приемник
Скрипт создает подключение к SQL Server $SQLConnection, выполняет запрос $Query к таблице Admins_plan, создает источник $rdr к этому запросу.
Далее в цикле перебираются строки источника $rdr, при
помощи функции function Edit_group группы сравниваются между собой и если есть расхождения, автоматически добавляются\удаляются
учетки Group members из первой группы во вторую. Ход выполнения работы логируется
в текстовый файл. При необходимости (и если не полениться J) можно настроить отправку сообщения
по E-mail админам в регионах домена – источника,
чтоб были уведомлены во сколько точно отработала синхронизация и какие пользователи были добавлены\удалены. Сам скрипт ниже:
# Скрипт синхронизации
групп в разных доменах
# Путь к файлу логирование
хода выполнения
$fileName = "C:\log.txt"
function Edit_group([string]$par0,[string]$par1)
{
$in =
(get-qadgroup $par0).dn
$out =
(get-qadgroup $par1).dn
$ingroupmembers = get-qadgroupmember $in
$outgroupmembers = get-qadgroupmember $out
#Если группы не пустые -
добавляем\удаляем пользователей в Group_domain_to
get-date
|out-file -append $fileName
if (($ingroupmembers -ne $null) -and ($outgroupmembers -ne $null))
{
$rez = compare-object $ingroupmembers $outgroupmembers
foreach($item in $rez)
{
if
($item.SideIndicator -eq “<=”){
$i=$item.InputObject
add-qadgroupmember $out -Member $i
'Добавляем '+ $i|out-file -append $fileName
}
if
($item.SideIndicator -eq “=>”){
$i=$item.InputObject
remove-qadgroupmember $out -Member $i
'Удаляем'+ $i|out-file -append $fileName
}
}
}
'--------------------------------------------------------------------------'|out-file -append $fileName
}
#Создаём подключение к серверу БД
$SQLConnection = new-object System.Data.SqlClient.SqlConnection("server=SERVER_NAME;database=DB_NAME;trusted_connection=true;")
#Запрос к таблице с
Админами+доменами
$Query="select
Group_domain_from,Group_domain_to from Admins_plan"
$SQLConnection.Open()
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand($Query, $SQLConnection)
$rdr=$SQLCommand.ExecuteReader()
#Вызов функции синхронизации
While($rdr.Read())
{
$a0=$rdr[0]$a1=$rdr[1]
'От группы '+$a0+' в группу
'+$a1|out-file -append $fileName
Edit_group -par0 $a0 -par1 $a1
}
#Закрываем подключение к
Серверу БД
$SQLConnection.Close()
Скрипт выполняется ежедневно по
расписанию (Windows Task Scheduler) путем запуска .bat файла.
0 комм.:
Отправить комментарий