Добавление локального пользователя в локальную группу администраторов в среде Active Directory - PullRequest
0 голосов
/ 25 апреля 2020

Во-первых, я знаю, как сделать то, что просит заголовок. Моя проблема заключается в выяснении, почему это не удается в определенных ситуациях. Для некоторого фона мне нужно создать локальную учетную запись пользователя и добавить этого пользователя в локальную группу администраторов независимо от того, является ли это средой AD или нет. Следующий пример кода работает в большинстве случаев.

        Using pc = New PrincipalContext(ContextType.Machine, Environment.MachineName)
            Using gp = GroupPrincipal.FindByIdentity(pc, "Administrators")
                If gp.Members.Contains(up) = False Then
                    gp.Members.Add(up)
                    gp.Save()
                End If
            End Using
        End Using

Однако, когда вы вошли в систему как пользователь AD, но отключил от сети, выдается «Сетевой путь не найден». исключение.

 at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
 at System.DirectoryServices.DirectoryEntry.Bind()
 at System.DirectoryServices.DirectoryEntry.get_AdsObject()
 at System.DirectoryServices.PropertyValueCollection.PopulateList()
 at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
 at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
 at System.DirectoryServices.AccountManagement.SAMStoreCtx.ResolveCrossStoreRefToPrincipal(Object o)
 at System.DirectoryServices.AccountManagement.SAMMembersSet.MoveNextForeign()
 at System.DirectoryServices.AccountManagement.SAMMembersSet.MoveNext()
 at System.DirectoryServices.AccountManagement.PrincipalCollectionEnumerator.MoveNext()
 at System.DirectoryServices.AccountManagement.PrincipalCollection.ContainsEnumTest(Principal principal)

Это имеет смысл, за исключением того, что я подумал, что не следует искать локальную группу в сети. Я могу успешно запустить это из командной строки:

net localgroup administrators username /add 

, и она отлично работает. Поэтому мой вопрос заключается в том, как программно добавить локального пользователя в группу локальных администраторов независимо от сетевого подключения как в средах AD, так и в средах без AD. Если мне нужно просто вернуться к выполнению net .exe, пусть будет так, но, похоже, должен быть более элегантный способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...