Это относится к Windows 7 и Windows Server 2008 R2, но, вероятно, может относиться к другим версиям.
Вопрос 1 : Как предпочтительно узнать из CLI все домены, к которым принадлежит пользователь (это, вероятно, нетривиально, но каким-то образом это можно сделать)?
Вопрос 2 : Как узнать все группы, членом которых является пользователь, из домена, в который этот пользователь в настоящее время не вошел (при условии, что пользователь знает необходимые учетные данные)?
Как указал @joeqwerty, пользователь может находиться только в одном домене. Вероятно, вам будет интересно узнать, как настраиваются доверительные отношения между различными доменами / лесами. Инструмент cmdline, который я использую для этого, - nltest
Из-за вложенности групп не существует элегантного способа получить членство пользователя в группе во всех доменах / лесах. Лучшим способом было бы перечислить все группы в каждом домене и рекурсивно проверить членство для желаемого пользователя.
У меня нет доступа к системе, присоединенной к домену, но код PowerShell должен выглядеть примерно так. Обратите внимание, что Get-ADGroup имеет максимальные пределы результатов, которые, возможно, потребуется настроить для вашей среды.
Import-Module ActiveDirectory
$AllDomainGroups = Get-ADGroup -Server DomainController -LdapFilter "(sAMAccountName=*)"
$AllDomainGroups | %{ [string[]]$MemberList = Get-ADGroupMember $_ -Recursive ; if($MemberList.Contains("SomeUser")){ Write-Host "$_`tTRUE" } else { Write-Host "$_`tFALSE" } }
Пробовали ли вы использовать https://technet.microsoft.com/en-us/library/cc732952.aspx DSQuery. Если я правильно понял ваш вопрос, этот здесь должен помочь.
Боже мой, все сценарии выше.Что не так с "whoami / all "? Предоставьте вам всю запрашиваемую информацию, за исключением того, что уже было указано кем-то выше, что пользователь принадлежит только к одному домену.
Следующий код может выполнять поиск, если у пользователя есть учетная запись на другом контроллере домена, а затем отображать все группы, к которым принадлежит этот пользователь. Если вы повторите этот код для каждого домена, вы получите то, что вам нужно.
Учетные данные - это учетные данные пользователя, у которого есть разрешения на контролируемый вами контроллер домена, сервер - это контроллер домена для домена, который вы хотите проверить. Имя должно быть именем пользователя (первым и последним) именно так, как оно отображается в учетных записях.
Вы можете изменить это, чтобы принимать входные данные или проходить через набор доменов (если у вас есть доверительные отношения между лесами)
Import-Module ActiveDirectory
#Set Name
$Name = "Nick Young"
# Create Password
$password = "password" | ConvertTo-SecureString -asPlainText -Force
# Set Username
$username = "domain\username"
# Create Credential
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
$Server = "server.fqdn.com"
$Domain1Account = @(Get-ADUser -Server $Server -Credential $credential -Filter {Name -eq $Name})
# SHow Message
Write-Host "Domain 1 Account" -forgroundcolor Yellow
# Display Info
if( $Domain1Account.count -lt 1 )
{
echo "No Account"
}
else
{
$Domain1Account | FT Name,UserPrincipalName
$Domain1Account | Get-ADPrincipalGroupMembership -Server $Server | FT Name,distinguishedName
}