1

Тема: Excel VBA: Определение FullName пользователя домена

Всем привет!
Есть тема для размышления, может есть решение?
Суть вопроса:
Необходимо программно получить на рабочей станции FullName (Description) пользователя домена.

Сразу скажу, есть одно решение, основано на переборе в цикле всех учеток пользователей в AD, и, при совпадении логина, считывается его FullName. Работает стабильно, но медленно, Excel "подвисает" на время цикла.

Есть две идеи, которые никак не получается реализовать (если, конечно, они реализуемы в VBA).
1. Попытаться считать из AD FullName по SID (возможно будет быстрее, чем сравнивать учетки по совпадению логина), но не методом сравнения, а адресно.
2. В системном реестре на станции есть нужная информация (не знаю, когда она туда попадает, но есть). Нужно найти в реестре все тот же SID и считать значение переменной Distinguished-Name. Как это сделать, если известна полная ветка реестра я знаю. Но проблема в том, что на разных станциях эта ветка не совпадает (возможно зависит от версии Windows), поэтому использовать это решение неприемлемо.

Что скажете, знатоки? Можно реализовать хотя бы одну из идей? А, может, предложите другой вариант???

2

Re: Excel VBA: Определение FullName пользователя домена

vinkonik пишет:

основано на переборе в цикле всех учеток пользователей в AD

Зачем перебором?

Option Explicit

Sub GetUserInfo
    With GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
        MsgBox "Full name: " & .FullName
    End With
End Sub

How Can I Determine the ADsPath for the Logged-On User? - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs
User Information | VBScript | SS64.com
Эй, автор сценариев!: Кто ты?

IADsADSystemInfo interface (Windows)
IADsUser interface (Windows)

3 (изменено: Rom5, 2014-02-08 00:50:17)

Re: Excel VBA: Определение FullName пользователя домена

vinkonik пишет:

Всем привет!
Есть тема для размышления, может есть решение?
Суть вопроса:
Необходимо программно получить на рабочей станции FullName (Description) пользователя домена.
[...]

То речь о пользователе локальной машины (на которой исполняется скрипт) или скрипт должен работать с удалённой машиной?

Если машина - удалённая, то сначала с помощью WMI-запроса к ней определяете логин текущего пользователя (если он там есть), а по нему делаете запрос к AD. В реестр в любом случае лезть нет нужды.

В приведённом выше "Эй, автор сценариев!" всё это есть.


А может Вам нужно получить данные по менеджеру машины?:) Тогда - к машине и обращаться не нужно, всё запросом к AD делается.

--------
Хммм... не досмотрел, что работать хотите в VBA.
VBA выбран только из-за того, что работаете с данными в Excel? То и VBS может читать-писать в таблицы экселя.

WBR. Roman

4

Re: Excel VBA: Определение FullName пользователя домена

Rom5 пишет:

VBA выбран только из-за того, что работаете с данными в Excel? То и VBS может читать-писать в таблицы экселя.

VBA выбран, т.к.: Есть файл Exсel, который уже превратился в программу, по причине наличия огромного кода, написанного на VBA (макросы, модули, формы и т.д.). Постоянно приходится "допиливать" существующий код. Сейчас, например, возникла необходимость идентификации пользователя - чтоб не только логин, но и полное имя. А найти его можно гарантированного только в AD (во всяком случае, в нашей организации).

5

Re: Excel VBA: Определение FullName пользователя домена

alexii пишет:
Option Explicit

Sub GetUserInfo
    With GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
        MsgBox "Full name: " & .FullName
    End With
End Sub

Alexii, к сожалению, раньше понедельника не смогу проверить... идет это у меня или нет.... т.к. сеть и файл на работе, а я сейчас не там.
Послезавтра попробую, результат отпишу.

6

Re: Excel VBA: Определение FullName пользователя домена

Alexii, к сожалению, раньше понедельника не смогу проверить... идет это у меня или нет.... т.к. сеть и файл на работе, а я сейчас не там.

Аналогично, коллега. Не проверялось.

Сейчас, например, возникла необходимость идентификации пользователя - чтоб не только логин, но и полное имя.

Может быть, будет достаточно пары «домен\логин»?

7

Re: Excel VBA: Определение FullName пользователя домена

alexii пишет:

Может быть, будет достаточно пары «домен\логин»?

Эта пара у меня есть, есть ещё SID и имя машины. Но в отчете для руководства это - мало что говорящая информация...
Практически - у меня и FullName есть, но, как я писал выше, машина "подвисает" минуты на две, пока по сети пролопатит AD. Я то могу подождать, а пользователи начинают нервничать....

8

Re: Excel VBA: Определение FullName пользователя домена

alexii пишет:
Option Explicit

Sub GetUserInfo
    With GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
        MsgBox "Full name: " & .FullName
    End With
End Sub

Alexii, спасибо! Все гениальное, как всегда, просто. Работает - влет. Вместо 2-х минут - 1 секунду. Осталось проверить на разных версиях Windows. Но, думаю, раз уж на XP работает, то на остальном тоже не подкачает.