Я несколько раз использовал Get-ADUser и Get-ADComputer для устранения проблем в системе.
Я видел несколько способов определить какой пользователь вошел в систему конкретный компьютер через любой реестр, PsLoggedon.exe и другие скрипты, но поскольку я не совсем администратор сети, мне часто отказывают в доступе. Это нормально, потому что мне не очень интересно копать так глубоко.
Все, что мне нужно, это каким-то образом определить, у каких пользователей есть учетная запись (профиль) на машине (или на каких машинах есть учетная запись пользователя), чтобы я мог связаться с ними и помочь им всякий раз, когда с их IP-адреса исходит исключение.
Нет ли абсолютно никакой связи между этими двумя объектами "из коробки"?
«Из коробки» между этими объектами нет абсолютно никакой связи. Windows 8 / Windows Server 2012 представила концепцию "основной компьютер" Атрибут схемы Active Directory, но я очень сомневаюсь, что вы обнаружите, что он используется.
Получение авторизованного пользователя на удаленном компьютере - одна из тех вещей, которые звуки как будто это должно быть очень просто, но на практике это не так.
Я думаю, вам придется заручиться некоторой поддержкой со стороны вашего сетевого администратора, чтобы надежно получить то, что вы ищете. Удаленный запрос информации о вошедшем в систему пользователе "обычными средствами" (psloggedon
, Запросы WMI, удаленный доступ к реестру) потребует либо наличия прав локального администратора на удаленном компьютере, либо внесения изменений в значения по умолчанию, чтобы предоставить это право контексту, не являющемуся администратором.
Чтобы поговорить о "взломах": я мог бы представить сценарий, в котором ваш обработчик исключений пытается перенаправить браузер пользователя на страницу, требующую аутентификации NTLM, и, если клиенты настроены на автоматическую попытку аутентификации с учетными данными вошедшего в систему пользователя, таким образом можно было «собрать» учетные данные. Я также мог видеть, как это может быть неправильно истолковано персоналом сетевого администрирования как атака на пользователей, поэтому я настоятельно рекомендую этого не делать.
Предположительно вы администрируете веб-приложение, но не являетесь сотрудником сетевого администрирования. Если бы вы могли заставить администрацию сети купить присоединение вашего веб-сервера к домену, вы могли бы включить аутентификацию, после чего вы узнали бы имя пользователя удаленного пользователя и вам не пришлось бы возиться с любым из этих IP-адресов. Если ваши клиенты правильно настроены, аутентификация также может происходить прозрачно.
Существующие профили на компьютере с Windows перечислены в следующем разделе реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Он содержит подраздел для каждого профиля пользователя, а имя каждого подраздела идентифицирует соответствующего пользователя с помощью идентификатора безопасности.
Вы можете «обнаружить» профили пользователей, перечислив подключи и переведя все идентификаторы безопасности пользователей в соответствующие им объекты учетных записей:
$profileList = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
# Retrieve subkeys that represent user profiles
$UserProfiles = Get-ChildItem $profileList |? {$_.Name -like "*S-1-5-21-*"}
foreach($Profile in $UserProfiles)
{
$ntAccType = [System.Security.Principal.NTAccount] -as [Type]
$userSid = ($Profile.Name-split"\\")[-1]
try{
# Attempt to translate the SID to an NTAccount object
(New-Object System.Security.Principal.SecurityIdentifier $userSid).Translate($ntAccType)
} catch {"Translating SID $userSid to Account failed"}
}