【发布时间】:2018-02-23 16:40:54
【问题描述】:
我正在尝试在 Powershell 中使用以下代码来获取当前用户的 Active Directory 组,以便我可以根据用户所属的组执行特定操作。代码如下:
$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {
$_.Translate([Security.Principal.NTAccount])
}
$groups
但是,此代码不会显示用户所属的所有 Active Directory 组。我知道 WindowsIdentity.Groups 不会返回所有组,不包括仅拒绝令牌上的组或此处记录的 SE_GROUP_LOGON_ID 组:https://blogs.msdn.microsoft.com/shawnfa/2008/02/07/which-groups-does-windowsidentity-groups-return/
我希望通过使用 net user \domain 从域控制器获取成员所属的组列表来获取命令提示符中返回的所有组。我不介意是否包含更多组,但至少所有使用 net user 命令显示的域控制器组都需要存在。我还尝试了另一种在 Powershell 中检索组名的方法(如下)。它返回的另一组组仍然不同于域控制器使用 net user 返回的组,也不同于上面的第一种方法:
$strName = $env:username
$strFilter = "(&(objectCategory=User)(samAccountName=$strName))"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter
$objPath = $objSearcher.FindOne()
$objUser = $objPath.GetDirectoryEntry()
$objUser.memberOf
任何可以为我提供包含在命令提示符中使用 net user 命令返回的所有组的列表的帮助将不胜感激。理想情况下,我正在寻找一个优雅的解决方案,例如我上面的第一个 sn-p 代码,它将组作为对象返回。我正在考虑直接在 Powershell 中从 net user 命令的输出中解析出组的名称,但在我这样做之前,我想确保我不会错过更优雅的解决方案。
【问题讨论】:
-
你可以在 powershell 中运行 net user /domain
标签: powershell active-directory