guvijur
@guvijur
Практик, кинестетик, ретроград и консерватор

Где ошибка в скрипте, устанавливающем время входа в систему в домене?

Задача: ограничить время, когда сотрудники могут авторизоваться в системе. Скрипт, который не выдаёт ошибок, явно меняет что-то во временных интервалах, но делает это не так, как надо:
От ИИ
# Получаем объект группы пользователей
$group = Get-ADGroup -Identity "Company ИТ-отдел"

# Получаем пользователей, которые входят в эту группу
$users = Get-ADGroupMember -Identity $group.DistinguishedName -Recursive | where { $_.objectClass -eq 'user' }

foreach ($user in $users) {
    Write-Host "Обрабатывается пользователь $($user.Name) ($($user.SamAccountName))"

    # Устанавливаем ограничения времени доступа для каждого пользователя
    $logonHours = New-Object -TypeName byte[] -ArgumentList 21

    # Устанавливаем доступ в будние дни с 6:00 до 23:00
    $logonHours[2] = 60
    $logonHours[3] = 15
    for ($i = 4; $i -lt 20; $i++) {
        $logonHours[$i] = 255
    }

    # Устанавливаем полный доступ в выходные дни
    $logonHours[20] = $logonHours[20] -bor 255

    # Устанавливаем ограничения времени доступа для пользователя
    try {
        Set-ADUser -Identity $user.DistinguishedName -Replace @{ 'logonHours' = $logonHours }
        Write-Host "Для пользователя $($user.Name) ($($user.SamAccountName)) установлено ограничение на время входа в систему: будние дни с 6:00 до 23:00, выходные дни - полный доступ"
    } catch {
        Write-Host "Ошибка при установке ограничений на время входа в систему для пользователя $($user.Name) ($($user.SamAccountName)): $($_.Exception.Message)"
    }
}


А вот, что он делает с временем входа. Всем пользователям группы он выставил вот такой интервал:
spoiler
644a73ae97bfa501704417.png

Windows 2012 R2
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
@BeatHazard
Вы так все усложнили...
Назначаете вручную одному пользователю нужные вам интервалы, затем берете его как шаблон и распространяете на нужную вам группу, либо берете значение из этого шаблона и вставляете в свой скрипт
Вот простенький скрипт, который делает то, что вам нужно:

$templateuser='a.khramov'
$templatehours= Get-ADUser -Identity $templateuser -properties logonHours
Get-ADGroupmember "msk-VPN_Users" |foreach {Set-ADUSer $_.samaccountname -Replace @{logonHours = $templatehours.logonHours} }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы