我正在开发一个脚本,它可以帮助我们缩短登录时间。我需要做的是,拉出当前的用户名,然后检查它是否是一个组的成员。我现在的代码是
$strFilter = "objectCategory=user"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=OU;DC=DC;DC=DC")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 100000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"
$colProplist = "samaccountname"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
$resultsarray = @()
foreach ($objResult in $colResults)
{
$objItem = $objResult.Properties | where-object -property samaccountname -eq $env:username
$objItem.samaccountname
}不幸的是,即使它打印用户名,我也弄不清楚它是哪个主体组的成员!因为这是在没有RSAT的客户端机器上运行的,所以我不能使用像get-adprincipalgroupmembership这样的活动目录cmdlet。有什么帮助吗?
发布于 2015-05-07 18:13:26
它是一个标准的LDAP属性。只需指定$colProplist = "samaccountname","memberof"即可。
不要因为错过了它而觉得很傻。MSDN AD LDAP文档是全面的,但并不特别有用,特别是因为它假定您已经理解了类继承,而且有些属性有两个不同的名称,而且只有一个名称是有效的,有时它似乎会根据上下文而改变。大多数人更喜欢像SelfADSI这样的替代源。
注意,这不是递归搜索,但Get-ADPrincipalGroupMembership也不是。获取所有AD组的列表--用户是直接成员或通过组成员--就像听起来一样痛苦。您获得了用户的成员资格,然后遍历每个组并检查它的成员,然后重复这些,直到您的父母用完为止,然后返回唯一的列表。使用ActiveDirectory模块更容易,但并不是无痛的。
https://stackoverflow.com/questions/30108064
复制相似问题