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

от admin

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

06.10.2022
useritpro
directoryActive Directory, PowerShell, Windows 10, Windows Server 2019
commentsкомментариев 9

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

Что такое SID объекта в Windows?

Как мы уже сказали, SID (security identifier) позволяет уникально идентифицировать пользовали, группу или компьютер в пределах определенной области (домена или локального компьютера). SID представляет собой строку вида:

S-1-5-21- 2927053466-1818515551-2824591131 — 1103 .
В данном примере:

  • 2927053466-1818515551-2824591131 – это уникальный идентификатор домена, выдавшего SID (у всего объекта в одном домене эта часть будет одинакова)
  • 1103 – относительный идентификатор безопасности объекта (RID). Начинается с 1000 и увеличивается на 1 для каждого нового объекта. Выдается контроллером домена с FSMO ролью RID Master)

SIDы объектов Active Directory хранятся в базе ntds.dit, а SIDы локальных пользователей и групп в локальной базе диспетчера учетных записей Windows (SAM, Security Account Manager в ветке реестра HKEY_LOCAL_MACHINE\SAM\SAM).

В Windows есть так называемые известные идентификаторы безопасности (Well-known SID). Это SID встроенных (BuiltIn) пользователей и групп, которые есть на любых компьютерах Windows. Например:

  • S-1-5-32-544 – встроенная группу Administrators
  • S-1-5-32-545 – локальные пользователи
  • S-1-5-32-555 – группа Remote Desktop Users, которым разрешен вход по RDP
  • S-1-5-domainID-500 – учетная запись встроенного администратора Windows
  • И т.д.

В Windows можно использовать различные средства для преобразования SID -> Name и Username -> SID: утилиту whoami, wmic, WMI, классы PowerShell или сторонние утилиты.

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

Чтобы получить SID локальной учетной записи, можно воспользоваться утилитой wmic, которая позволяет обратится к пространству имен WMI (Windows Management Instrumentation) компьютера.

wmic useraccount where name=’test_user’ get sid

Узнать SID пользователя через WMI

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

Чтобы вывести список SID всех локальных пользователей Windows, выполните:

wmic useraccount get name,sid.

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

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

Можно обратится к WMI напрямую из PowerShell:

(Get-CimInstance -Class win32_userAccount -Filter «name=’test_user’ and domain=’$env:computername'»).SID

Get-LocalUser -Name ‘test_user’ | Select-Object Name, SID

powershell получить sid локалього пользователя в Windows

По аналогии можно получить SID локальной группы:

Get-LocalGroup -Name tstGroup1 | Select-Object Name, 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 пользователя или группы в домене Active Directory

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

whoami user getsid

Получить SID пользователя домена Active Directory можно с помощью 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

get-aduser select sid

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

Get-ADGroup -Filter | Select SID

Get-ADGroup получить sid доменной группы

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

$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)

PowerShell - get SID via SecurityIdentifier and NTAccount

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

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

Получить SID компьютера

Если компьютер с Windows добавлен в домен Active Directory, у него будет два разных SID. Первый SID – идентификатор локального компьютера (Machine SID), а второе – уникальный идентификатор компьютера в AD.

SID компьютера в домене Active Directory можно получить с помощью команды:

Get-ADComputer srv-rds1 -properties sid|select name,sid

get-adcomputer команда для получения SID компьютера в домене Active Directory

SID локального компьютера (Machine SID) можно получить с помощью бесплатной утилиты PsGetsid (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid): Но ее придется скачивать и устанавливать на каждый компьютер вручную.

Или просто, обрезав последние 4 символа RID и SID любого локального пользователя:

$user=(Get-LocalUser Administrator).sid
$user -replace «.<4>$»

PsGetsid6 вывести machine sid локального компьютера

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

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

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

Для поиска имени доменного пользователя по SID используйте командлеты из модуля RSAT-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

Get-ADGroup найти группу по SID

Также можно узнать получить SID группы и пользователя с помощью встроенных классов 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

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

Get-ADObject поиск объектов в AD по известному SID

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

Как узнать SID пользователя

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

Примечание. Говоря об уникальности SID, надо сделать одну оговорку. В Windows существуют так называемые встроенные (BuiltIn) учетные записи, такие как Administrator или Guest. SID-ы этих записей одинаковы в каждом экземпляре Windows вне зависимости от версии ОС. Это дает администратору возможность более-менее централизованно управлять доступом при отсутствии доменной структуры.

SID для локальных учетных записей храниться базе данных диспетчера учетных записей (Security Account Manager, SAM) на локальном компьютере, для доменных — в базе Active Directory. И сегодня речь пойдет о том, как можно узнать SID пользователя по его имени и наоборот, как выяснить имя пользователя по его SID.

Whoami

Когда требуется посмотреть SID текущего пользователя, то проще всего воспользоваться утилитой whoami. Для этого надо открыть консоль cmd и выполнить команду:

узнаем SID пользователя с помощью whoami

В том случае, когда необходимо узнать SID произвольного пользователя, можно воспользоваться Windows Management Instrumentation (WMI). Один из инструментов для работы с WMI — утилита WMIC. Так например, узнать SID пользователя Kirill можно такой командой:

wmic useraccount where name=′Kirill′ get sid

А можно и наоборот, выяснить имя пользователя по его SID:

wmic useraccount where sid=′S-1-5-21-4178654016-3479515840-607560339-1000′ get name

узнаем SID локального пользователя с помощью wmic

Дополнительно в WMI-запросе можно указать имя компьютера (для локального) или домена (для доменного пользователя). Например эта команда выведет SID локального администратора:

wmic useraccount where (name=′administrator′ and domain=′%computername%′) get sid

а эта — доменного:

wmic useraccount where (name=′administrator′ and domain=′contoso′) get sid

узнаем SID локального и\или доменного администратора с помощью wmic

Для обычного пользователя все также, узнаем SID по имени:

wmic useraccount where (name=′kirill′ and domain=′contoso′) get sid

wmic useraccount where (sid=′S-1-5-21-2404695605-4156858507-746700462-1001′ and domain=′contoso′) get name

узнаем SID доменного пользователя с помощью wmic

Примечание. В запросе вместо имени компьютера\домена можно использовать переменные %computername% и %userdomain%.

PowerShell и WMI

PowerShell также позволяет работать с WMI. Для примера обратимся к классу win32_userAccount и выведем SID доменного:

и локального пользователя:

Также вместо имени компьютера и домена можно указывать переменные окружения $env:computername и $env:userdomain, например:

узнаем SID пользователя с помощью wmi

Для обратной операции (узнать имя пользователя по SID) нам потребуется использовать свойство SID класса win32_SID. Например:

узнаем имя пользователя по его SID с помощью wmi

Как вариант, для работы с WMI можно использовать командлет Get-WmiObject (или Get-CimInstance). Например так мы узнаем SID пользователя:

(Get-WmiObject -Class win32_userAccount -Filter ″name=′Kirill′ and domain=′Contoso′″).SID

узнаем SID пользователя с помощью Get-WmiObject

(Get-WmiObject -Class win32_userAccount -Filter ″SID=′S-1-5-21-2404695905-416858507-746700462-1001′″).Name

узнаем имя пользователя по SID с помощью Get-WmiObject

PowerShell и .NET

Также узнать SID пользователя можно с помощью .NET класса System.Security.Principal.NTAccount. Этот класс используется для представления пользователя или группы. Для получения SID локального пользователя надо создать новый объект этого класса и передать ему в виде параметра имя пользователя, а затем с помощью метода Translate перевести объект пользователя в объект класса System.Security.Principal.SecurityIdentifier, который предназначен для представления SID пользователя или группы:

$User = New-Object System.Security.Principal.NTAccount(″Kirill″)
$SID = $User.Translate([System.Security.Principal.SecurityIdentifier])
$SID.Value

Для доменного пользователя процедура идентична, только в виде параметра передаются имя пользователя и имя домена:

$User = New-Object System.Security.Principal.NTAccount(″Contoso″,″Kirill″)
$SID = $User.Translate([System.Security.Principal.SecurityIdentifier])
$SID.Value

узнаем SID пользователя с помощью .Net

Для обратной процедуры получения имени по SID делаем наоборот — сначала создаем объект класса System.Security.Principal.SecurityIdentifier и передаем ему в виде параметра SID пользователя, а затем переводим его в объект класса System.Security.Principal.NTAccount и выводим свойство Value, содержащее имя пользователя:

$SID = New-Object System.Security.Principal.NTAccount(″S-1-5-21-4178654016-3479515840-607560339-1000″)
$User = $SID.Translate([System.Security.Principal.NTAccount])
$User.Value

узнаем имя пользователя по SID с помощью .Net

PsGetSid

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

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

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

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

Get-ADUser: поиск сведений о пользователях и фильтр пользователей по их свойствам в Active Directory

Get-ADUser — это один из базовых командлетов PowerShell, который можно использовать для получения информации о пользователях домена Active Directory и их свойствах. Вы можете использовать Get-ADUser, чтобы просмотреть значение любого атрибута объекта пользователя AD, отобразить список пользователей в домене с необходимыми атрибутами и экспортировать их в CSV, а также использовать различные критерии и фильтры для выбора пользователей домена.

Командлет Get-ADUser доступен начиная с PowerShell 2.0 и является частью специального модуля Active Directory для Windows PowerShell (представленного в Windows Server 2008 R2). Командлеты RSAT-AD-PowerShell позволяют выполнять различные операции с объектами AD.

Примечание. Раньше для получения информации об атрибутах учётных записей пользователей AD приходилось использовать различные инструменты: консоль ADUC (включая сохранённые запросы AD), сценарии vbs, dsquery и так далее. Все эти инструменты теперь легко заменить командлетом Get-ADUser.

Рассмотрим пример, в котором мы расскажем, как получить информацию о последнем изменении пароля пользователя и дате истечения срока действия пароля с помощью командлета Get-ADUser PowerShell.

Как найти пользователя AD и вывести список свойств с помощью Get-ADUser

Чтобы использовать командлет Get-ADUser необходимо установить Модуль Active Directory для Windows PowerShell, в каких системах он уже присутствует и как его установить если он ещё не установлен, смотрите в статье «Как установить и использовать модуль Active Directory PowerShell». На рабочих станциях данный модуль вы можете установить следующей командой:

Чтобы использовать командлет Get-ADUser, вам не нужно запускать его под учётной записью с администратором домена или с делегированными разрешениями. Любой авторизованный пользователь домена AD может запускать команды PowerShell для получения значений большинства атрибутов объекта AD (кроме конфиденциальных, например, связанных со сменой пароля). Если вам нужно запустить команду Get-ADUser из другой учётной записи, используйте параметр -Credential.

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

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

Чтобы выполнить запрос AD на конкретном контроллере домена, используйте опцию -Server. Чтобы вывести информацию по определённому пользователю, укажите его имя после опции -Identity:

Чтобы изменить атрибуты пользователя, используйте командлет Set-ADUser.

По умолчанию командлет Get-ADUser возвращает только 10 основных атрибутов пользователя (из более чем 120 свойств учётной записи пользователя): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус учётной записи (Enabled: True/False в соответствии с атрибутом UserAccountControl AD) и так далее. В этом случае вывод командлета не содержит информации о времени последней смены пароля пользователя.

Чтобы отобразить подробную информацию обо всех доступных пользовательских атрибутах, выполните эту команду:

Командлет Get-ADUser с опцией «-Properties *» отображает список всех пользовательских атрибутов AD и их значений.

Теперь мы перейдём к форматированию вывода Get-ADUser, чтобы отображались необходимые атрибуты пользователя. Вы можете отображать сразу несколько атрибутов пользователя:

  • PasswordExpired (Срок действия пароля истёк)
  • PasswordLastSet (Последний раз пароль установлен)
  • PasswordNeverExpires (Пароль никогда не истекает)
  • LastLogonTimestamp (Временная метка последнего входа)

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

Теперь в пользовательских данных есть информация о статусе учётной записи (Истёк ли срок действия пароля: True/False), дате последней смены пароля и времени последнего входа пользователя в домен. Чтобы отобразить эту информацию в более удобном табличном виде и удалить все ненужные атрибуты, используйте Select-Object -Property или Format-Table:

Get-ADUser: поиск в нескольких подразделениях с помощью SearchBase

Чтобы отображать пользователей только из определённого контейнера домена (организационного подразделения), используйте опцию -SearchBase:

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

Работа с email адресами пользователей в Active Directory с помощью PowerShell

Адрес электронной почты пользователя — это один из атрибутов объекта пользователя в Active Directory. Чтобы перечислить адреса электронной почты пользователей, необходимо добавить поле EmailAddress в значение опции -Properties командлета Get-ADUser.

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

Чтобы получить список пользователей Active Directory без адреса электронной почты:

Следующий пример позволяет экспортировать адресную книгу электронной почты компании из AD в файл CSV, который впоследствии можно импортировать в почтовые клиенты, такие как Outlook или Mozilla Thunderbird:

Get-ADUser: экспорт пользователей AD в CSV/TXT

Полученный список пользователей домена с атрибутами можно экспортировать в текстовый файл:

Или вы можете экспортировать список пользователей AD в файл CSV (который позже будет удобно импортирован в Excel):

Читать:
Что такое битрейт в обс

Использование Get-ADUser с фильтрацией по атрибутам

Используя опцию -Filter, вы можете фильтровать список учётных записей пользователей по одному или нескольким атрибутам. В качестве аргументов этого параметра можно указать значение определённых атрибутов пользователей Active Directory. Если вы используете параметр -Filter, командлет Get-ADUser будет перечислять только тех пользователей, которые соответствуют критериям фильтра.

Например, я хочу перечислить активные (Enabled) учётные записи пользователей, имя которых содержит «Dmitry» (в приведённом ниже примере используется несколько фильтров; вы можете комбинировать условия, используя стандартные логические операторы сравнения PowerShell):

Кроме того, вы можете отсортировать полученный список пользователей по определённому атрибуту пользователя (столбцу) с помощью командлета Sort-Object. Вы также можете использовать командлет Where-Object для одновременного указания нескольких критериев фильтрации.

Таким образом, вы можете составить таблицу с любыми необходимыми атрибутами пользователей Active Directory.

Примеры использования Get-ADUser

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

Отобразить пользователей AD, имя которых начинается с Joe:

Вы можете использовать PowerShell для расчёта общего количества учётных записей пользователей в Active Directory:

Вывод списка пользователей и их свойств, размещённых в определённом организационном подразделении (контейнере) в данном случае это OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM:

Найти отключённые учётные записи пользователей Active Directory:

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

Вы можете получить список недавно добавленных пользователей Active Directory, созданных за последние 24 часа:

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

Командлеты Get-ADUser и Add-ADGroupMember можно использовать для создания динамических групп пользователей AD (в зависимости от города, должности, отдела и прочего).

Задача: для списка учётных записей, которые хранятся в текстовом файле (по одной учётной записи в строке), вам необходимо получить название компании пользователя из AD и сохранить его в файл CSV (вы можете легко импортировать этот файл в Excel).

Пользователи, которые не меняли свои пароли в течение последних 90 дней:

Чтобы получить фотографию пользователя из Active Directory и сохранить её в файле jpg, выполните следующие команды:

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

Перечислить пользователей из OU, которые являются членами определённой группы безопасности домена:

Перечислить компьютеры домена, на которых пользователю разрешён вход.

Чтобы искать компьютеры и фильтровать компьютеры по их свойствам в Active Directory, вы можете использовать другой командлет – Get-ADComputer.

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

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

а где еще вывод с учетной записью?

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

IPAddress : 127.0.0.1

а где еще вывод с учетной записью?

The opinion expressed by me is not an official position of Microsoft

последняя компанда whoami, выполняется залогиненым пользователем. А можно ещё так:

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

IPAddress : 127.0.0.1

а где еще вывод с учетной записью?

whoami должен вам вернуть имя учетной записи

The opinion expressed by me is not an official position of Microsoft

да, все верно, whoami выводит имя учетной записи, а почему выводится такой большой список ip-адресов? нужен только один, а там еще выводится ip-адрес из файла "hosts", нужен только IPv4

  • Изменено Andrey09121985 26 ноября 2018 г. 14:52

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

IPAddress : 127.0.0.1

а где еще вывод с учетной записью?

whoami должен вам вернуть имя учетной записи

The opinion expressed by me is not an official position of Microsoft

да, все верно, whoami выводит имя учетной записи, а почему выводится такой большой список ip-адресов? нужен только один, а там еще выводится ip-адрес из файла "hosts", нужен только IPv4

Вы противоречите сам себе. Что означает IP из файла Hosts? Файл Hosts используется не для задания IP адресов а как альтернатива DNS.

The opinion expressed by me is not an official position of Microsoft

  • Изменено Vector BCO Moderator 26 ноября 2018 г. 14:56

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

IPAddress : 127.0.0.1

а где еще вывод с учетной записью?

whoami должен вам вернуть имя учетной записи

The opinion expressed by me is not an official position of Microsoft

да, все верно, whoami выводит имя учетной записи, а почему выводится такой большой список ip-адресов? нужен только один, а там еще выводится ip-адрес из файла "hosts", нужен только IPv4

Вы противоречите сам себе. Что означает IP из файла Hosts? Файл Hosts используется не для задания IP адресов а как альтернатива DNS.

The opinion expressed by me is not an official position of Microsoft

+ CategoryInfo : ObjectNotFound: (. String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Потому, что Вы так поставили задачу.

полная команда для IP адреса:

при выводе команды выдает IPAddress : fe80::1835:61f1:ed3d:d2e4%9

IPAddress : 127.0.0.1

а где еще вывод с учетной записью?

whoami должен вам вернуть имя учетной записи

The opinion expressed by me is not an official position of Microsoft

этим командлетом выдается информация компа, с которого выполнялся командлет,а как выполнить командлет, чтобы получить информацию об удаленном компьютере?

  • Изменено Andrey09121985 26 ноября 2018 г. 16:42

Андрей, тут дело такое что многое упирается в конфигурацию вашей сети и ТЗ вашей задачи.

Например whoami вам на удаленной машине не поможет так как вернет имя того от кого вы запустите скрипт, а вот если вы скрипты расскидаете политикой то поможет.

Опишите ТЗ детально, что когда и как регулярно вам нужно получать и вам предложат несколько вариантов под конкретно вашу задачу.

BGInfo которое вам предлагали вполне нормально конфигурится через политики, парсировка логов так же вполне себе решение если у вас немного КД, удаленное выполнение скриптов тоже норм решение, но требует конфигурации сети (например winrm и firewall)

The opinion expressed by me is not an official position of Microsoft

Андрей, тут дело такое что многое упирается в конфигурацию вашей сети и ТЗ вашей задачи.

Например whoami вам на удаленной машине не поможет так как вернет имя того от кого вы запустите скрипт, а вот если вы скрипты расскидаете политикой то поможет.

Опишите ТЗ детально, что когда и как регулярно вам нужно получать и вам предложат несколько вариантов под конкретно вашу задачу.

BGInfo которое вам предлагали вполне нормально конфигурится через политики, парсировка логов так же вполне себе решение если у вас немного КД, удаленное выполнение скриптов тоже норм решение, но требует конфигурации сети (например winrm и firewall)

The opinion expressed by me is not an official position of Microsoft

Вам нужно отталкиваться от имени компа или пользователя? Если от имени компа (узнать кто работает на ПК ‘ivanov123’) можно выполнив 1 команду, а вот для того что бы узнать на каком ПК работает Петров И.С. вам нужно опросить все пк и вот среди них выбрать тот на котором работает ваш пользователь.

Это 2 абсолютно разные задачи с точки зрение подхода решения.

В общем случае Help invoke-command -full вам должен помочь но для его работы нужен сконфигурированный winrm + firewall. Но вот если вы его будете использовать для второй задачи, то это может быть проблемой особенно если ПК в вашем домене значительно больше 10.

The opinion expressed by me is not an official position of Microsoft

  • Изменено Vector BCO Moderator 26 ноября 2018 г. 17:49

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

Вам нужно отталкиваться от имени компа или пользователя? Если от имени компа (узнать кто работает на ПК ‘ivanov123’) можно выполнив 1 команду, а вот для того что бы узнать на каком ПК работает Петров И.С. вам нужно опросить все пк и вот среди них выбрать тот на котором работает ваш пользователь.

Это 2 абсолютно разные задачи с точки зрение подхода решения.

В общем случае Help invoke-command -full вам должен помочь но для его работы нужен сконфигурированный winrm + firewall. Но вот если вы его будете использовать для второй задачи, то это может быть проблемой особенно если ПК в вашем домене значительно больше 10.

The opinion expressed by me is not an official position of Microsoft

нужно узнать имя компа или ip-адрес компа, зная имя учетной записи домена, как выполнить командлет?

я уже давал Вам один из вариантов — анализ логов контроллеров домена. Только там Вы сможете задать имя пользователя и получить IP адрес рабочей станции, с которой он делал запрос. Больше нигде (по умолчанию) доменные пользователи не регистрируются (имеются ввиду удалённая регистрация).

Как второй вариант настроить IPAM. Там тоже можно по имени пользователя найти все его IP адреса (его компьюетра)

нужно узнать имя компа или ip-адрес компа, зная имя учетной записи домена, как выполнить командлет?

я уже давал Вам один из вариантов — анализ логов контроллеров домена. Только там Вы сможете задать имя пользователя и получить IP адрес рабочей станции, с которой он делал запрос. Больше нигде (по умолчанию) доменные пользователи не регистрируются (имеются ввиду удалённая регистрация).

Как второй вариант настроить IPAM. Там тоже можно по имени пользователя найти все его IP адреса (его компьюетра)

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

Только это решение будет зависеть от многих переменных которые так вами и не были озвучены

The opinion expressed by me is not an official position of Microsoft

  • Изменено Vector BCO Moderator 28 ноября 2018 г. 8:24
  • Предложено в качестве ответа Vector BCO Moderator 28 ноября 2018 г. 8:24

нужно узнать имя компа или ip-адрес компа, зная имя учетной записи домена, как выполнить командлет?

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

The opinion expressed by me is not an official position of Microsoft

The opinion expressed by me is not an official position of Microsoft

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

The opinion expressed by me is not an official position of Microsoft

нужно узнать имя компа или ip-адрес компа, зная имя учетной записи домена, как выполнить командлет?

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

The opinion expressed by me is not an official position of Microsoft

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

+ CategoryInfo : ObjectNotFound: (*:ADComputer) [Get-ADComputer], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADComputer

+ CategoryInfo : ObjectNotFound: (*:ADComputer) [Get-ADComputer], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADComputer

добавте перед * -Filter

upd: я поправил скрипт

The opinion expressed by me is not an official position of Microsoft

  • Изменено Vector BCO Moderator 26 ноября 2018 г. 19:23

+ CategoryInfo : ObjectNotFound: (*:ADComputer) [Get-ADComputer], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADComputer
добавте перед * -Filter

The opinion expressed by me is not an official position of Microsoft

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:24
+ if (Test-Connection $ComputerName -quiet -count 1) <
+

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:24
+ if (Test-Connection $ComputerName -quiet -count 1) <
+

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:24
+ if (Test-Connection $ComputerName -quiet -count 1) <
+

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:24
+ if (Test-Connection $ComputerName -quiet -count 1) <
+

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:24
+ if (Test-Connection $ComputerName -quiet -count 1) <
+

+ CategoryInfo : InvalidData: (:) [Test-Connection], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Test-Connection : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL.
Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.

Похожие статьи