Pull to refresh

Особенности изменения времени входа пользователей в русифицированной версии active directory

Как то раз пришло письмо от руководства в соответствии с которым всем пользователям нужно ограничить время входа в домен windows в соответствии с рабочими часами организации. Изначально это сделали руками. Но иногда из-за праздников рабочие дни переносят на выходные. Для автоматизации включения и выключения времени входа в выходные дни было решено написать небольшой скрипт меняющий значение атрибута пользователя «LogonHours».

По умолчанию в десятичной системе счисления значение атрибута "LogonHours" выглядит так "255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255". При помощи гугла была найдена статья в которой описывалось назначение каждого из элементов этого массива. Суть в том что в массиве 21 элемент, нумерация начинается с 1 и заканчивается 0, а каждый из элементов отвечает за 8 часов одного из дней так как показано на картинке.

image

Но в сша в отличии от нас неделя начинается не с понедельника а с воскресенья, возможно из-за этого нюанса Нумерация элементов изменилась на столько что и номера элементов поменялись и отвечать некоторые из них стали за 2 разных дня.

image

Т. К. каждый элемент массива отвечает за 8 часов. его значение должно меняться в зависимости от разрешенных часов входа. Значение элемента равное 0 означает что в это время пользователю будет отказано во входе, 255 же наоборот разрешит ему вход на протяжении всех восьми часов. Для того чтобы изменить определенные часы существуют значения присвоенные каждому из восьми часов элемента, для высчитывания такого элемента значения нужно суммировать.

image

Например для того что бы пользователь смог войти в систему в понедельник с 8 до 12 утра значение нужно выставить равным 240=16+32+64+128.

Сам скрипт:

 Import-Module ActiveDirectory
$day=read-host "введите значение вкл или выкл "
$users=Get-ADUser -Filter {samaccountname -notlike "<b>XXX</b>*"} -properties logonhours -SearchBase "<b>адрес OU</b>"
$users|foreach {
[byte[]]$hours=$_|select -expand logonhours
if ($day -eq "вкл")
{$hours[0]=240
$hours[1]=255}
elseif ($day -eq "выкл")
{$hours[0]=0
$hours[1]=0}
else
{break}
$replaceHashTable = New-Object HashTable
$replaceHashTable.Add("logonHours", $hours)
set-aduser -identity $_ -replace $replaceHashTable
}


XXX — Общее начало логина сервисных учетных записей.
адрес OU — путь к ou вида «OU=,OU=, DC=rf, DC=,DC=ru».

Вот такие небольшие особенности изменения атрибута «LogonHours»/
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.