Назад | Перейти на главную страницу

Запретить пользователям входить в систему локально

Как я могу запретить пользователям входить в систему локально и заставить их входить в домен. Некоторые пользователи все еще входят в систему локально, что мы использовали до недавнего преобразования. Мне нужно немедленно прекратить это.

Контроллер домена - это Windows 2008 Server, и каждая рабочая станция (кроме одной - Windows 7 Pro) работает под управлением Windows XP SP3.

Лучший способ справиться с этим - удалить локальные учетные записи пользователей с затронутых клиентских компьютеров. Если пользователи знают пароль локального администратора на этих машинах, измените его.

Однако, если учетные записи домена пользователей имеют права «Администратора» на клиентских компьютерах, они могут просто создать дополнительные учетные записи локальных пользователей.

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

Option Explicit 

Dim dictUsersToIgnore, objNetwork 
Dim colSourceAccounts, objSourceUser

' Debugging 
Const DEBUGGING = True 

' Source and destination computers 
Const SOURCE_COMPUTER = "." 

' Constants for comparison of accounts to ignore list 
Const MATCH_EXACT = 1 
Const MATCH_LEFT = 2 

' Accounts to ignore during copying 
Set dictUsersToIgnore = CreateObject("Scripting.Dictionary") 
dictUsersToIgnore.Add "SUPPORT_", MATCH_LEFT 
dictUsersToIgnore.Add "IUSR_", MATCH_LEFT 
dictUsersToIgnore.Add "IWAM_", MATCH_LEFT 
dictUsersToIgnore.Add "Administrator", MATCH_EXACT 
dictUsersToIgnore.Add "Guest", MATCH_EXACT 
dictUsersToIgnore.Add "HelpAssistant", MATCH_EXACT 
dictUsersToIgnore.Add "ASPNET", MATCH_EXACT 

' Should this account be ignored 
Function IgnoreObject(Name, dictNames) 
    Dim strToIgnore 

    IgnoreObject = False 

    For Each strToIgnore in dictNames 

        ' Match Exact 
        If (dictNames.Item(strToIgnore) = MATCH_EXACT) and (UCase(Name) = UCase(strToIgnore)) Then 
                IgnoreObject = True 
                Exit Function 
        End If 

        ' Match left 
        If (dictNames.Item(strToIgnore) = MATCH_LEFT) and (Left(UCase(Name), Len(strToIgnore)) = UCase(strToIgnore)) Then 
                IgnoreObject = True 
                Exit Function 
        End If 

    Next' strToIgnore 
End Function 

Set objNetwork = CreateObject("Wscript.Network") 

' Get accounts on source computer and loop through them, copying as necessary 
Set colSourceAccounts = GetObject("WinNT://" & SOURCE_COMPUTER) 
colSourceAccounts.Filter = Array("user") 
For Each objSourceUser In colSourceAccounts 

    If IgnoreObject(objSourceUser.Name, dictUsersToIgnore) = False Then 
        If (DEBUGGING) Then WScript.Echo "Deleting account: " & objSourceUser.Name 
        colSourceAccounts.Delete "user", objSourceUser.Name 
    Else 
        If (DEBUGGING) Then WScript.Echo "Ignoring account: " & objSourceUser.Name 
    End If 
Next ' objSourceUser 

Добавьте любые имена пользователей, которые не следует удалять, в список dictUsersToIgnore. MATCH_EXACT означает, что имя пользователя совпадает точно. MATCH_LEFT означает, что будет сопоставлена ​​только самая левая часть имени пользователя (т.е. представьте, что после совпадения имени стоит "*").

Этот сценарий подходит для использования в качестве сценария запуска AD. Будьте осторожны с его масштабированием - он действительно может испортить вам день, если вы запустите его не в том месте.

Явно определите GPO "Deny Logon Locally", чтобы заблокировать всех пользователей, которым вы хотите запретить, и примените это к OU, в котором они живут ... Это может потребовать некоторой манипуляции с вашей схемой AD, но это должно решить все твои проблемы ...

Ты можешь использовать Ограниченная группа особенность групповой политики Active Directory. Второе, что вам, вероятно, следует сделать, это остаться учетной записью локального администратора, это также возможно vi GP.