Как найти учетную запись в домене

В предыдущей статье мы описали процедуру сброса пароля стандартной учётной записи администратора домена Active Directory (учетка administrator). Данный сценарий отлично работает в «стандартной» среде Active Directory, однако в некоторых доменах подобный трюк может не сработать, т.к. при их разворачивании были использованы best practice Microsoft по обеспечению безопасности инфраструктуры AD. В реальных доменах AD для защиты учетной записи администратора домена могут применяться следующие стратегии:

  • Переименование стандартной учетной записи администратора Active Directory
  • Создание учетной записи-приманки. Учетная запись хоть и имеет имя Administrator, но никакими правами повышенными не обладает. Кроме того, с помощью политик аудита можно настроить оповещение служб безопасности о попытке авторизации с помощью этой учётной записи
  • Отключение учетной записи Administrator и предоставление полномочий администратора домена другой учетке.

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

Итак, в предыдущей статье мы показывали, каким образом с помощью создания системного сервиса на контроллере домена можно сбросить пароль домен-админа. Данная команда при загрузке DC сбросит пароль доменной учетной записи administrator (администратора домена) на [email protected].

sc create ResetADPass binPath= "%ComSpec% /k net user administrator [email protected]" start= auto

Что же делать, если под этой учетной записью авторизоваться не получается? Скорее всего, при разворачивании домена она была защищена по одной из перечисленных выше методик.

Монтируем отключенную базу Active Directory

Попробуем извлечь из базы AD информацию о реальных администраторах домена. Для этого нужно загрузиться в DSRM режиме, в котором база Active Directory (ntds.dit) находится в отключенном состоянии. Нам необходимо локально смонтировать эту базу, чтобы в дальнейшем получить возможность доступа к хранимой в ней информации.

Запустите две командные строки: в первой мы запустим процесс dsamain.exe , во второй будем вводить интерактивные команды.

Совет. При работе на Server Core вторую командную строку можно открыть, выполнив в исходной cmd команду:

start cmd

Перед запуском утилиты dsamain.exe, удостоверимся, что другие сервисы и процессы в настоящий момент не используют порт 389. Сделать это можно командой:

netstat -ano | findstr :389

В том случае, если команда ничего не вернула – все ОК, идем дальше (если вернула нужно найти и отключить найденный процесс).

Утилита dsamain.exe позволяет смонтировать базу AD и выполнять к ней различные запросы LDAP(по сути позволяет организовать автономный LDAP сервер). Утилита запускается со следующими параметрами:

  • dbpath – задает путь к файлу ntds.dit.
  • allowNonAdminAccess – разрешает осуществлять LDAP запросы к базе AD под локальной учетной записью (по умолчанию доступ разрешен только членам групп Domain Admins и Enterprise Admins).
  • ldapPort – позволяет указать порт LDAP. Мы будем использовать стандартный LDAP порт — 389.

Смонтируем базу AD командой:

dsamain -dbpath C:WindowsNTDSntds.dit -allowNonAdminAccess -ldapPort 389

Удостоверимся, что процесс dsamain.exe запущен и слушает 389 порт. Для этого во второй командной строке выполните команду:

netstat -ano | findstr :389

TCP 0.0.0.0:389 0.0.0.0:0 LISTENING 614

TCP [::]:389 [::]:0 LISTENING 614

TCP 0.0.0.0:389 *:* 614

TCP [::]:389 *:* 614

Получаем, что процесс с Process ID 614 слушает на порту TCP 389.
Проверим, что процесс с PID 604 и есть наш процесс dsamain.exe:

tasklist /fi "pid eq 614" /fo list

Image Name: dsamain.exe

PID: 614

Session Name: Console

Session#: 2

Mem Usage: 11,316 K

Как найти администратора домена active directory

Теперь, когда база AD смонтирована, мы можем обращаться к ней с помощью утилит ds* (dsget, dsquery и т.д.). Разберем все три варианта скрытия учетной записи администратора домена.

Переименованная учетная запись администратора домена

Как можно определить, что стандартная учетная запись администратора Active Directory переименована?
Стандартный administrator AD имеет известный идентификатор SID, формат которого S-1-5-21-[ид домена]-500, соответственно, нам просто нужно найти в домене объект с таким SID. Во второй командной строке выполните команду:

dsquery user -s localhost | dsget user -s localhost -samid -sid | findstr /c:"-500"

itpro S-1-5-21-2292496274-2043586872-6449473370-500

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

sc create ResetPW binPath= "%ComSpec% /k net user itpro [email protected]" start= auto

Теперь можно размонтировать базу AD (остановить процесс dsamain.exe комбинацией Ctrl+C). Убедитесь, что команда вернула строку

Active Directory Domain Services was shut down successfully

Поддельная учетная запись администратора AD

Как определить, что стандартный Administrator Active Directory не обладает необходимыми правами? Это очень просто. Зная DN (distinguished name) учетной записи administrator, мы можем получить список групп, в которых он состоит:

dsget user "CN=Administrator,CN=Users,DC=winitpro,DC=ru" -s localhost -memberof -expand

«CN=Domain Users,CN=Users,DC=winitpro,DC=ru»

«CN=Users,CN=Builtin,DC=winitpro,DC=ru»

Как вы видите, данная учетная запись не состоит в группе администраторов домена (Domain Admins) и не подойдет для наших целей. Следующая методика поможет найти «реальных» администраторов.

Альтернативный администратор домена

Попробуем разобраться как можно получить список учетных записей, обладающих правами администратора домена? Для начала попробуем рекурсивно вывести всех членов группы Administrators (в том числе членов групп Domain Admins и Enterprise Admins).

dsquery group -s localhost -samid "administrators" | dsget group -s localhost -members -expand

«CN=Domain Admins,CN=Users,DC=winitpro,DC=ru»

«CN=Enterprise Admins,CN=Users,DC=winitpro,DC=ru»

«CN=Administrator,CN=Users,DC=winitpro,DC=ru»

«CN=itpro,CN=Users,DC=winitpro,DC=ru»

Как вы видите, администраторскими правами обладают учетные записи Administrator и itpro. Проверим статус учётной записи Administrator:

dsget user "CN=Administrator,CN=Users,DC=winitpro,DC=ru" -s localhost -samid -sid -disabled

samid sid disabled

Administrator S-1-5-21-2092397264-2003686862-3249677370-500 yes

Как вы видите, она отключена.

Проверим теперь статус учетки itpro:

dsget user "CN=itpro,CN=Users,DC=winitpro,DC=ru" -s localhost -samid -sid -disabled

samid sid disabled

itpro S-1-5-21-2092397264-2003686862-3249677370-1107 no

dsget succeeded

Эта учетная запись активна. Проверим в каких группах она состоит:

dsget user "CN=itpro,CN=Users,DC=winitpro,DC=ru" -s localhost -memberof -expand

«CN=Group Policy Creator Owners,CN=Users,DC=winitpro,DC=ru»

«CN=Domain Admins,CN=Users,DC=winitpro,DC=ru»

«CN=Enterprise Admins,CN=Users,DC=winitpro,DC=ru»

«CN=Schema Admins,CN=Users,DC=winitpro,DC=ru»

«CN=Domain Users,CN=Users,DC=winitpro,DC=ru»

«CN=Denied RODC Password Replication Group,CN=Users,DC=winitpro,DC=ru»

«CN=Administrators,CN=Builtin,DC=winitpro,DC=ru»

«CN=Users,CN=Builtin,DC=winitpro,DC=ru»

Отлично, у нее есть права администратора домена! Осталось cбросить пароль учетной записи с samid — itpro. Опять таки, сделать это можно с помощью службы:

sc create ResetPW binPath= "%ComSpec% /k net user itpro PA$w0rd94" start= auto

Не забудьте отмонтировать базу AD и перезагрузите сервер.

Как узнать имена учетных записей Администраторов домена и не только

Обновлено 20.07.2016

Как узнать имена учетных записей Администраторов домена и не только-01

Как узнать имена учетных записей Администраторов домена и не только-01

Всем привет сегодня хочу рассказать как узнать имена учетных записей Администраторов домена и не только. Для того чтобы все это осуществить достаточно быть пользователем домена. Как это не странно, но в Active Directory имена администраторов не являются конфиденциальной информацией, как показал эксперимент вообще можно вытащить состав любой группы главное правильно указать ее название.

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

Net group «Domain Admins» /domain

Как узнать имена учетных записей Администраторов домена и не только-02

Как узнать имена учетных записей Администраторов домена и не только-02

Чтобы в русской версии узнать кто у вас администратор домена вводим команду

Net group «Администраторы домена» /domain

Вы получите список администраторов домена

Как узнать имена учетных записей Администраторов домена и не только-03

Как узнать имена учетных записей Администраторов домена и не только-03

Теперь давайте посмотрим Администраторов предприятия.

Net group «Администраторы предприятия» /domain

Как узнать имена учетных записей Администраторов домена и не только-04

Как узнать имена учетных записей Администраторов домена и не только-04

Вот так вот просто узнать логины и членов любой группы в Active Directory.

Материал сайта pyatilistnik.org

Июл 20, 2016 20:58

Содержание

  1. Как узнать SID пользователя по имени и наоборот
  2. Получить SID локального пользователя
  3. Получить SID доменного пользователя
  4. Определить имя пользователя по SID
  5. Как посмотреть доменных пользователей windows
  6. Что такое Sid windows
  7. База Security Account Manager
  8. 1 способ узнать sid пользователя, команда WMIC
  9. 2 способ узнать sid пользователя, команда Whoami
  10. 3 способ узнать sid пользователя, ADUC и ADSIedit
  11. 4 способ узнать sid пользователя, утилита PsGetSid
  12. 5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
  13. 6 способ узнать sid пользователя, Get-ADUser
  14. Как массово определить SID пользователя
  15. Как узнать SID пользователя или группы AD по имени и наоборот?
  16. Как получить SID локального пользователя?
  17. Узнать SID пользователя или группы в домене AD по имени
  18. Как узнать имя учетной записи пользователя или группы по SID?
  19. Поиск объектов в Active Directory по SID

Как узнать SID пользователя по имени и наоборот

В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым каталогам, ключам реестра, объектам файловой системы и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя и обратной процедуры – определения имени пользователя Windows по его SID.

Для преобразования username в SID можно воспользоваться отличий утилитой из комплекта Sysinternals — PsGetSid. Но ее придется выкачивать и устанавливать на каждую систему вручную.

Гораздо проще воспользоваться утилитой командной строки или скриптом Powershell

Получить SID локального пользователя

Чтобы получить SID локальной учетной записи на данной машине, можно воспользоваться утилитой wmic, обращающейся к WMI хранилищу. Для локального пользователя test_user команда будет такой:

wmic useraccount where name=’test_user’ get sid

В этом примере SID пользователя — S-1-5-21-1175651296-1316126944-203051354-1005

Если нужно узнать SID текущего пользователя, выполните такую команду:

wmic useraccount where name=’%username%’ get sid

На PowerShell скрипт, выдающий тот же результат можно реализовать с помощью двух классов SecurityIdentifier и NTAccount.

$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

Получить SID доменного пользователя

Узнать SID текущей доменной учетной записи можно командой:

Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell.

Get-ADUser -Identity ‘jjsmith’ | select SID

Если модуль AD для PowerShell отсутствует, через Powershell можно запросить данные из домена так:

$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

Эта же команда в одну строку:

(new-object security.principal.ntaccount “jjsmith»).translate([security.principal.securityidentifier])

Определить имя пользователя по SID

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

wmic useraccount where sid=’S-1-3-12-12452343106-3544442455-30354867-1434′ get name

На PowerShell при помощи модуля AD для Powershell:

Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-2470456651-3958312488-29145117-23345716»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Попробуйте наши услуги обслуживания и получите третий месяц обслуживания в подарок!

Как посмотреть доменных пользователей windows

Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.

Что такое Sid windows

Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:

  • Группа безопасности
  • Пользователь
  • Компьютер
  • Организационная единица
  • Принтер

SID во время создания объекта, присваивается ему , в домене Active Directory за это отвечает мастер роль RID. В рамках домена, каждый SID должен быть уникален, в отличии от имени, так как Ивановых Иванов Ивановичей, может быть много, а вот отличаться они будут логином и SID. Для операционной системы Windows, важнее сиды объектов, она же их использует и для контроля прав доступа на различные корпоративные ресурсы:

  • Папки и файлы
  • Принтеры
  • Доступ к внешним ресурсам

Структура SID

Давайте разбираться из каких частей состоит Security IDentifier.

Впереди идет версия сида, далее Генеральная область Authority — это ссылка на систему источник, которая его выпустила. В операционных системах Windows версия Security IDentifier сейчас одна и равна она 1, Генеральная область Authority имеет значения 1,3,5, для Microsoft Exchange она 9. Далее в сиде следует 1 или более идентификаторов Sub Authority, а за ними идет RID (Relative IDentificator) локальный для данного Sub Authority номер субъекта безопасности.

По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.

Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.

База Security Account Manager

Давайте посмотрим за, что отвечает Security Account Manager:

  • Сопоставление имен с SID и обратно, некий такой DNS для учетных записей
  • Проверяет пароли, авторизовывает (принимает участие в процессе входа пользователей в ОС)
  • Ведет статистику, кто последний входил, количество входов, кто сколько раз ввел не тот пароль, короче аудит
  • Контролирует политика паролей учетных записей, в случае чего может блокировать учетные записи.
  • Ведет учет, кто в какие группы входит
  • Производит защиты самого себя
  • Дает программный интерфейс для управления базой учетных записей

Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.

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

SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.

1 способ узнать sid пользователя, команда WMIC

Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду

На выходе вы получите список локальных пользователей.

Чтобы выяснить все логины доменных пользователей вводим команду

Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое

Далее зная логин все просто вводим

Как видите все работает.

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

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

Для доменной структуры

Получить логин по SID аналогично предыдущей команду.

2 способ узнать sid пользователя, команда Whoami

Тоже довольно старенькая команда из cmd.exe. Вводим

Получаем полный сид текущего залогиненного пользователя.

Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920

Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей

Так же вы увидите сведения о привилегиях.

На мой взгляд, данный метод, немного проще первого, так как требует ввода меньшего количества ключей.

3 способ узнать sid пользователя, ADUC и ADSIedit

В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.

После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.

Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.

Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.

4 способ узнать sid пользователя, утилита PsGetSid

Есть такая замечательная утилита от Microsoft од названием PsGetSid.

Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.

смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.

Вводим команду psgetsid имя компьютералогин учетки

и наоборот, выясним имя по SID:

5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount

Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.

Для локального пользователя команда будет такой.

6 способ узнать sid пользователя, Get-ADUser

Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.

получить наоборот логин по sid

Как массово определить SID пользователя

Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.

В этом нам поможет скрипт PowerShell. Откройте ISE.

foreach ($line in (Get-Content $users_file))
<
$username = ($Line -split «\»)[1]
$user = Get-ADUser $username -Server «DC4.root.pyatilistnik.org»

$Result = [ordered]@ <
user = $line
SID = $user.SID
>

New-Object PSObject -Property $Result
>

На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.

Как узнать SID пользователя или группы AD по имени и наоборот?

В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы, принтерам и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя или группы (локальных или из Active Directory), и обратную процедуру – определение имени пользователя или группы Windows по известному SID.

Получение учетки по SID:

На мой взгляд, проще всего для преобразования SID -> Username и Username -> SID проще всего воспользоваться командами командной строки или несложными командлетами PowerShell:

Как получить SID локального пользователя?

Чтобы получить SID локальной учетной записи на данном компьютере, можно воспользоваться утилитой wmic, которая позволяет обратится к пространству имен WMI компьютера. Для получения SID локального пользователя test_user можно использовать утилиту WMIC:

wmic useraccount where name=’test_user’ get sid

Команда вернула нам SID указанного пользователя — S-1-5-21-1175651296-1316126944-203051354-1005.

Если нужно узнать SID текущего пользователя (под которым выполняется команда), используйте такую команду:

wmic useraccount where name=’%username%’ get sid

С помощью двух .NET классов System.Security.Principal.SecurityIdentifier и System.Security.Principal.NTAccount вы можете получить SID пользователя с помощью PowerShell:

$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

Узнать SID пользователя или группы в домене AD по имени

Вы можете узнать SID текущей доменной учетной записи командой:

Узнать SID доменного пользователя можно с помощью WMIC. В этом случае в команде нужно указать имя домена:

wmic useraccount where (name=’jjsmith’ and domain=′corp.winitpro.ru′) get sid

Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell. Получим SID для аккаунта jjsmith:

Get-ADUser -Identity ‘jjsmith’ | select SID

Вы можете получить SID группы AD с помощью другого командлета — Get-ADGroup:

Get-ADGroup -Filter | Select SID

Если на вашем компьютере не установлен модуль AD для PowerShell, вы можете получить SID пользователя с помощью упомянутых ранее классов .Net:

$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

Эта же команда PowerShell в одну строку:

(new-object security.principal.ntaccount “jjsmith»).translate([security.principal.securityidentifier])

Как узнать имя учетной записи пользователя или группы по SID?

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

wmic useraccount where sid=’S-1-3-12-12452343106-3544442455-30354867-1434′ get name

На PowerShell получить имя пользователя по его SID можно с помощью модуля AD для PowerShell:

Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Чтобы найти имя доменной группы по известному SID используйте команду:

Get-ADGroup -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Также можно узнать SD группу и пользователя с помощью встроенных классов PowerShell (без дополнительных модулей):

$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-2470456651-3958312488-29145117-23345716»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Поиск объектов в Active Directory по SID

Если вы не знаете к какому типу объекта AD относится некий SID и какой точно командлет использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup), вы можете использовать универсальный метод поиска объектов в Active Directory по SID с помощью командлета Get-ADObject (параметр IncludeDeletedObjects позволяет искать по удаленным объектам AD в корзине).

$sid = ‘S-1-5-21-2470146651-3951111111-2989411117-11119501’
Get-ADObject –IncludeDeletedObjects -Filter «objectSid -eq ‘$sid’» | Select-Object name, objectClass

SID

В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass).

Получить полное имя пользователя текущего домена

Используя PowerShell, как я могу получить полное имя текущего пользователя домена (не только его имя пользователя) без необходимости использования модуля ActiveDirectory?

Некоторые другие (в основном) неясные свойства также доступны. Несколько полезных:

  • Homedrive UNC
  • Homedrive Letter
  • Описание
  • Скрипт входа

Мне нравится принятый ответ, но только потому, что я хотел попробовать это сам:

или если вы не хотите иметь информацию заголовка и только результат:

Один лайнер с использованием Powershell 3.0:

На основании вашего комментария на принятый ответ Craig620,

Нужны ли мне права администратора домена для запуска этой команды? Или может сам пользователь домена может запустить эту команду?

Похоже, вы пытаетесь избежать установки модулей powershell на пользовательских рабочих станциях, да, но также, нет, вам не нужно быть администратором домена, чтобы искать свое собственное имя в AD. Вы можете найти практически любую информацию, которая появляется в GAL в Outlook, включая полное имя обычного пользователя.

Вы также можете посмотреть полные имена других людей как обычный пользователь в AD (используя Get-WmiObject Win32_userAccount , если вы хотите избежать модулей AD). Учетные записи служб, которые запрашивают AD (ну, прежде чем управляемые учетные записи служб ), обычно являются обычными непривилегированными пользователями AD.

Использование -match не является хорошим выбором, потому что $ env: USERNAME для «ed» будет соответствовать «fred» и «edith». Вместо этого используйте -eq для точного соответствия и добавьте в домен, если необходимо. Я использую цикл foreach в конце, чтобы убрать все начальные пробелы в качестве альтернативы «select fullname | ft -HideTableHeaders», которая печатает начальную и конечную новую строку.

Если у вас всегда есть .Net 3.5 или выше (что вы должны делать с PowerShell v4.0 и выше):

Этот класс обеспечивает очень простой доступ ко всем распространенным свойствам LDAP, поэтому вам не нужно искать дважды (один раз с WinNT и снова с LDAP) или использовать [ADSISearcher] для поиска LDAP, если вам нужны некоторые расширенные свойства, которые WinNT не реализует ,

Если вы не хотите использовать модуль Active Directory, вы не можете; если вы не хотите пойти еще глубже и выполнить фактический запрос LDAP к контроллеру домена.

Любая пользовательская информация, кроме имени пользователя, хранится в Active Directory, и ее необходимо найти там.

Поиск полного имени пользователя

Компьютеры можно упорядочить в домен, который представляет собой коллекцию компьютеров сети. Администратор домена поддерживает централизованные сведения об учетной записи пользователя и группы.

Чтобы найти полное имя пользователя, укажите имя пользователя и доменное имя:

  • Преобразуйте имя пользователя и доменное имя в Юникод, если они еще не являются строками Юникода.
  • Найдите имя компьютера контроллера домена, вызвав NetGetDCName.
  • Найдите имя пользователя на компьютере контроллера домена, вызвав NetUserGetInfo.
  • Преобразуйте полное имя пользователя в ANSI, если программа не ожидает работы со строками Юникода.

Следующий пример кода — это функция (GetFullName), которая принимает имя пользователя и доменное имя в первых двух аргументах и возвращает полное имя пользователя в третьем аргументе.

PowerShell: системное администрирование и программирование

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

Как в PowerShell узнать имя пользователя

В операционной системе Windows и Windows Server можно выделить различные типы пользователей:

  • пользователь, выполнивший вход в систему
  • зарегистрированный владелец установленной ОС и имя зарегистрированного пользователя операционной системы
  • имеющиеся учётные записи в данной ОС

Рассмотрим, как получить имя каждого вида пользователя.

Как узнать имя пользователя, выполнившего вход

Самым очевидным кажется способ обратиться к переменной окружения:

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

А эта команда выведет имя компьютера:

Недостаток этого метода в том, что пользователь может подделать значение переменной окружения %UserName%.

Ещё одним недостатком может быть то, что, возможно, вам нужно имя пользователя вида «ДОМЕНПОЛЬЗОВАТЕЛЬ» или «КОМПЬЮТЕРПОЛЬЗОВАТЕЛЬ».

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

Ещё одним способом получить имя пользователя в PowerShell является команда:

Если вы хотите более компактный вывод, то используйте следующий синтаксис:

Как вывести список всех пользователей Windows

Чтобы просмотреть список всех учётных записей, используйте командлет:

Чтобы показать только имена, используйте синтаксис:

Чтобы вывести только активные учётные записи, используйте команду:

Следующая команда покажет только имена активных учётных записей:

Владельцы и зарегистрированные пользователи Windows

Вы можете найти информацию о других видах пользователей:

  • WindowsRegisteredOwner — имя зарегистрированного владельца этой установки Windows из реестра Windows.
  • CsPrimaryOwnerName — имя основного владельца системы
  • OsRegisteredUser — имя зарегистрированного пользователя операционной системы

Универсальная команда whoami

Следующая команда покажет имя пользователя как в PowerShell, так и в CMD:

Время на прочтение
5 мин

Количество просмотров 33K

Привет всем!
Работаю в компании. 1500+ активных пользователей.
Организован ХелпДеск, сотрудники регистрируют тикеты в системе, но, как-то так получается, что часть из юзеров забывают указывать имя пк, за которым они находятся.

Для выяснения этой информации (по телефону/email/экстрасенсорные способности) девочки из поддержки тратят драгоценное время, которое они могли бы уделить свежей чашке кофе или разговорам о новом платье (шутка). Наши сотрудники постоянно заняты своей непосредственной работой.

Идея (не инновация конечно) — писать данные о логонах пользователя в единую базу, а потом через веб оперативно искать нужную информацию.

image

Что у нас есть?

Windows среда (ХР/7/2003/2008), учетные записи хранятся в AD, все устройства работаю в локальной сети в качестве СУБД используем MSSQL 2005/2008R2.

Что мы хотим?

Поиск информации через веб интерфейс:

  1. Где логинился сотрудник с фамилией, например, «Иванов«;
  2. Кто логинился на устройстве, например, «PC34«;
  3. Где были совершены логоны под учетной записью, например, «hr.ivanov«.

Должна отображаться информация:

  • имя пк;
  • login;
  • фио;
  • ip адрес;
  • дата логона.

Название?

Так как «решением» будут пользоваться несколько человек (от 5 до 35 человек), надо как-то его обозвать для удобства. Нарекли мы его «SuperVisor».

Приступим к реализации

Как будем писать в БД?

Первое, что пришло в голову — это создать bat файл с sqlcmd, но для каждой версии Windows нужна своя версия утилиты sqlcmd. Неудобно, и мы не стали копать глубже.

Вторым решением было создать небольшой exe клиент, который при запуске будет собирать данные об имени доменной учетной записи, имени пк, ip адресе пк и после получения этой информации будет выполняться вставка данных в БД. Программу размещаем, например, в папке NETLOGON на контроллере домена и групповыми политиками распространяем на ПК/Сервера в локальной сети компании.

Программа на Delphi

unit Unit1;
interface
uses
  Windows,SysUtils, Variants, Classes, Forms,WinSock,
  Dialogs, DB, ADODB,StdCtrls,Messages, ExtCtrls;
type
  TForm1 = class(TForm)
    boston: TADOConnection;
    qryinsert: TADOQuery;
    timer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure timerTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}
// версия 0.0.4
// дата 27-02-2014

function GetCurrentUserName: string;
 const
   cnMaxUserNameLen = 254;
 var
   sUserName: string;
   dwUserNameLen: DWORD;
 begin
   dwUserNameLen := cnMaxUserNameLen - 1;
   SetLength(sUserName, cnMaxUserNameLen);
   GetUserName(PChar(sUserName), dwUserNameLen);
   SetLength(sUserName, dwUserNameLen);
   Result := string(sUserName);
 end;

 function GetCurrentComputerName: string;
 const
   cnMaxComputerNameLen = 254;
 var
   sComputerName: string;
   dwComputerNameLen: DWORD;
 begin
   dwComputerNameLen := cnMaxComputerNameLen - 1;
   SetLength(sComputerName, cnMaxComputerNameLen);
   GetComputerName(PChar(sComputerName), dwComputerNameLen);
   SetLength(sComputerName, dwComputerNameLen);
   Result := string(sComputerName);
 end;

  function GetLocalIP: String;
  const WSVer = $101;
  var
    wsaData: TWSAData;
    P: PHostEnt;
    Buf: array [0..127] of Char;
  begin
    Result := '';
    if WSAStartup(WSVer, wsaData) = 0 then begin
      if GetHostName(@Buf, 128) = 0 then begin
        P := GetHostByName(@Buf);
        if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
      end;
      WSACleanup;
    end;
  end;


  procedure TForm1.FormCreate(Sender: TObject);
  begin
  try
    qryinsert.SQL.Text := 'begin TRANSACTION insertdata' +#13#10 +
    'insert into [supervisor].[user].[info_host](host,login,last_ip) values (:host,:login,:ip)'+#13#10 +
    'COMMIT TRANSACTION insertdata';
    qryinsert.Parameters.ParamByname('login').Value:= GetCurrentUserName ;
    qryinsert.Parameters.ParamByname('host').Value:= GetCurrentComputerName ;
    qryinsert.Parameters.ParamByname('ip').Value:= GetLocalIP ;
    qryinsert.ExecSQL;    
    timer.Enabled:=True;
    form1.timer.Interval:=1500;
  except    
    Application.Terminate;
  end
  end;

  procedure TForm1.timerTimer(Sender: TObject);
  begin
    ExitProcess(0);
  end;
end.

Дальше алгоритм такой:

  1. Пользователь логинится за пк;
  2. Скрытно запускается SuperVisor.exe;
  3. Делается попытка INSERT в указанную бд, если успешно, то программа завершает свою работу;
  4. Если выполнить INSERT не получается (ноутбук не в локальной сети, сервер бд недоступен и т.д), таймаут 15 секунд и процесс «убивается», не пугая пользователя страшными сообщениями и окнами.

Отлично, теперь создадим таблицы, в которых будут храниться данные

/* 

Главная таблица, в которую пишутся логоны
-----------------------------------------------------------
host - имя пк
login - имя доменной учетной записи
last_ip - ip адрес пк
createdate - дата создания записи
createdate_unix - unix время, дата создания записи
------------------------------------------------------------

*/

CREATE TABLE [user].[info_host](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[host] [nvarchar](128) NULL,
	[login] [nvarchar](128) NULL,
	[createdate] [datetime] NOT NULL,
	[createdate_unix] [int] NOT NULL,
	[last_ip] [nvarchar](20) NULL
) ON [supervisor]

GO

ALTER TABLE [user].[info_host] ADD  DEFAULT (getdate()) FOR [createdate]
GO

ALTER TABLE [user].[info_host] ADD  DEFAULT (datediff(second,'1970-01-01 00:00:00',getutcdate())) FOR [createdate_unix]

/*

Таблица справочник с ФИО учетных записей, наполняется из АД. Синхронизация происходит один раз в сутки
------------------------------------------------------------
login - имя доменной учетной записи
displayName - поле displayname из АД для учетной записи 
createdate - дата создания записи
createdate_unix - unix время, дата создания записи
------------------------------------------------------------

*/

CREATE TABLE [user].[info_login_card](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[login] [nvarchar](128) NULL,
	[createdate] [datetime] NOT NULL,
	[createdate_unix] [int] NOT NULL,
	[displayName] [nvarchar](256) NULL
) ON [supervisor]

GO

ALTER TABLE [user].[info_login_card] ADD  DEFAULT (getdate()) FOR [createdate]
GO

ALTER TABLE [user].[info_login_card] ADD  DEFAULT (datediff(second,'1970-01-01 00:00:00',getutcdate())) FOR [createdate_unix]
GO

Таблицы созданы и наполняются данными. Забыл написать, что сервер БД у нас виртуальный и работает под Windows Server 2003R2, СУБД MSSQL 2008R2. Сервер приложения виртуальный, Windows 2003R2, Apache 2.2 + PHP 5.2

Следующий шаг — создание веб интерфейса для того, чтобы системные администраторы и сотрудники хелпдеска могли комфортно работать с сервисом. Во внутренних разработках, для экономии времени, я использую фреймфорк Bootstrap. Главная страница, до того как начинают вводить данные в поисковую строку, выглядит так:

image

В строку поиска можно ввести фамилию сотрудника/учетную запись(логин) или имя компьютера:

image

Причем, не обязательно вводить полностью фамилию и имя сотрудника/логин/имя пк, поиск совпадений в БД осуществляется с помощью оператора LIKE ( пример …LIKE ‘ива%’), запросы выполняются асинхронно, результат поиска обновляется перед глазами сотрудника без перезагрузки страницы после ввода нового символа в строку поиска.

запрос к бд для поиска по ФИО

               set rowcount $limit
                      SELECT
                           a.[id]
                          ,a.[host]
                          ,a.[login]
                          ,a.[createdate]
                          ,a.[createdate_unix]
                          ,a.[last_ip]
                          ,b.[displayName]
                      FROM [user].[info_host] a
                     left join [user].[info_login_card] b on a.login = b.login
                      where b.displayName like ('$ihostlogin')
                      order by a.[createdate_unix] desc
                        set rowcount 0

запрос к бд для поиска по имени пк

                      set rowcount $limit
                      SELECT
                           a.[id]
                          ,a.[host]
                          ,a.[login]
                          ,a.[createdate]
                          ,a.[createdate_unix]
                          ,a.[last_ip]
                          ,b.[displayName]
                      FROM [user].[info_host] a
                     left join [user].[info_login_card] b on a.login = b.login
                      where a.host like ('$hostlogin')
                      order by a.[createdate_unix] desc
                        set rowcount 0

поиск по логину

set rowcount $limit
                      SELECT
                           a.[id]
                          ,a.[host]
                          ,a.[login]
                          ,a.[createdate]
                          ,a.[createdate_unix]
                          ,a.[last_ip]
                          ,b.[displayName]
                      FROM [user].[info_host] a
                     left join [user].[info_login_card] b on a.login = b.login
                      where a.login like ('$hostlogin')
                      order by a.[createdate_unix] desc
                        set rowcount 0

«Супервизор» работает у нас в компании около года, со своей главной задачей справляется отлично. Тикеты теперь берутся в работу оперативнее, сотрудникам не нужно тратить время на уточнение дополнительной информации для того, чтобы преступить к решению заявки.

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

Успехов в работе!

Полезные ссылки

Установка Apache2.2 и PHP-5;
Подключение MS SQL к PHP 5.3 и выше.

Понравилась статья? Поделить с друзьями:
  • Как найти системные файлы на компьютере
  • Разные веки на глазах как исправить
  • Как найти горация в катакомбах картуса
  • Как найти бензопилу в игре forest
  • Как найти прописку человека по фамилии бесплатно