Get-ADGroupMember
cmdlet返回特定组的成员。是否有一个cmdlet或属性可以获取特定用户所属的所有组?Get-ADPrincipalGroupMembership
可以做到这一点,它来自于Active Directory模块。您需要安装该模块或在Windows 10+上安装RSAT才能运行下面的命令。
Get-ADPrincipalGroupMembership username | select name
name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam
get-aduser $username -Properties memberof | select -expand memberof
很好地运作了。 - JohnLBevanimport-module activedirectory
,这样应该就可以运行了。 - James Toomey无需模块,单行代码即可使用当前登录用户:
(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf
对这篇VBScript/PowerShell文章赞一个:http://technet.microsoft.com/en-us/library/ff730963.aspx
$env:username
更改为 $username
,并使用 $username = "testuser"
进行设置,以便为其他用户查找轻松进行变量替换。 - p̻̻̥r̥̻̥o̻j̤͛ec͔t̞dp(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf -replace "CN=(.*?),.*" ,"``$1" | Sort
。 - CraZ一个更加简洁的方法,用来获取当前已登录用户的组成员身份。
我在这篇博客文章中发现了这种方法:http://www.travisrunyard.com/2013/03/26/auto-create-outlook-mapi-user-profiles/
([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof
使用正则表达式剥离LDAP乱七八糟的内容,只保留组名的更好版本:
([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'
有关如何使用[ADSISEARCHER]类型加速器的详细信息,请参阅 scripting guy 博客:http://blogs.technet.com/b/heyscriptingguy/archive/2010/08/24/use-the-powershell-adsisearcher-type-accelerator-to-search-active-directory.aspx
| Sort-Object
可以使其更易读。 - Martin Hollingsworth从CMD中的老派方式:
net user mst999 /domain
(GET-ADUSER –Identity USERNAME –Properties MemberOf | Select-Object MemberOf).MemberOf
whoami /groups
如果您无法使用Get-ADPrincipalGroupMembership,请尝试以该用户身份登录,然后使用。
$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {$_.Translate([Security.Principal.NTAccount])}
$groups | select *
$id = [Security.Principal.WindowsIdentity]("username")
的东西,您也不需要作为用户登录。 - Bitcoin Murderous Maniac[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | % {$_.Translate([Security.Principal.NTAccount])}
。 - alx9r虽然这里有很多优秀的答案,但我个人正在寻找的其中一个丢失了。一旦我弄清楚了,我认为我应该发布它,以防我以后想找到它,或者它在某个时候实际上能帮助其他人:
Get-ADPrincipalGroupMembership username | Format-Table -auto
这种方法的另一种呈现方式是指定您感兴趣的各个列,例如:
Get-ADPrincipalGroupMembership username | select name, GroupScope, GroupCategory
Get-Member不是用于获取用户组成员身份的。如果您想要获取用户在本地系统中所属的组列表,可以通过以下方式实现:
$query = "ASSOCIATORS OF {Win32_Account.Name='DemoUser1',Domain='DomainName'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"
Get-WMIObject -Query $query | Select Name
获取用户的组成员身份:
$strUserName = "Primoz"
$strUser = get-qaduser -SamAccountName $strUserName
$strUser.memberof
请参阅获取用户组成员身份
同时也可以查看Quest公司的免费Active Directory PowerShell命令.
[编辑: Get-ADPrincipalGroupMembership 命令已经包含在Windows 2008 R2的Powershell v2中。请参阅kstrauss的答案。]
net user /domain username
命令,也可以在 Get Groups in which a user is a member Using PowerShell 中查看其他方法。 - Mohamed