Предположим, у меня есть идентификатор пользователя в Active Directory. Я хотел бы получить список всех групп AD, членом которых является данный пользователь. Как я могу сделать это из командной строки Windows?
Я пробовал следующее:
dsget user "DC=jxd123" -memberof
Ошибка:
dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.
Или с сетевой пользователь команда ...
net user /domain username
Одна строка, модули не требуются, использует текущего зарегистрированного пользователя $ ($ env: username), запускается с других компьютеров Windows:
(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf
Одержимость этой статьи на vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx
Вы можете легко сделать это в PowerShell. Я уверен, что вы тоже можете сделать это с помощью инструментов ds, но они старые и прочные, и PowerShell следует использовать для всего, что возможно в настоящее время.
Import-Module ActiveDirectory
(Get-ADUser userName –Properties MemberOf | Select-Object MemberOf).MemberOf
Укороченная версия
(Get-ADUser userName –Properties MemberOf).MemberOf
Нашел хороший ресурс:
Вот как это сделать из командной строки Windows:
dsquery user -samid jxd123 | dsget user -memberof | dsget group -samid
Если вам нужно увидеть свои группы, есть whoami /groups
:
Отображает группы пользователей, к которым принадлежит текущий пользователь.
Преимущество этой команды перед net user /domain username
заключается в том, что неявное членство в группах также отображается с whoami
.
PowerShell:
Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name
Другой подход: сценарий PowerShell, который перечисляет все неявное членство в группах из токена учетной записи Windows. Работает в ограниченной системе.
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()
ForEach($group in $token.Groups){
$group.Translate([System.Security.Principal.NTAccount])
}
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
adfind - еще один отличный инструмент для такого рода вещей. Это бесплатный инструмент от MVP Джо Ричардса.
http://www.joeware.net/freetools/tools/adfind/
Вы можете использовать один из кратких
adfind -sc u:username memberof
Эта версия PowerShell возвращает только имена групп AD, а не DN группы. Вывод «select-object» можно легко передать по конвейеру в CSV или тестовый файл.
(Get-ADUser ExampleUser –Properties MemberOf).memberof | Get-ADGroup | Select-Object name
Powershell дает красивый и чистый вывод.
(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}
Вот решение для поиска всех доменов в данном домене (при условии правильного разрешения для каждого домена):
# provide the logon name here:
$user="alice"
$allGroups=@()
foreach ( $d in (Get-ADForest example.net).domains ) { Write-Output "Looking up $user in domain $d"; $allGroups += Get-ADPrincipalGroupMembership $user -ResourceContextServer $d }
$allGroups | ft name,GroupScope,distinguishedName -AutoSize
С помощью Get-ADPrincipalGroupMembership
Попробуй это:
gpresult -V /user blah