确定给定用户是否在给定的全局组中

时间:2013-06-05 13:45:13

标签: powershell active-directory dsquery

我正在尝试使用PowerShell中的AD模块搜索Active Directory。我正在尝试确定给定用户是否在给定的全局组中。问题是我正在使用-match,这意味着如果有一个用户名包含另一个用户名,例如' smith_pl'包含' smith_p'。用户&#m; smith_p'将被证明属于该组。

所以我的问题是:根据用户是否在使用AD模块的全局组中,是否有更好的方法来获得$True$False返回?

如果不是

有没有办法将$ListOfmembers的输出转换为数组,以便我可以使用-eq代替-match


脚本的一部分:

$ListOfmembers = dsquery group domainroot -name $globalgroup | 
                 dsget group -members | 
                 dsget user -samid -L

$checkMember = $False
#Search if the user is in output the list
If($ListOfmembers -match $Logonname){
    $checkMember = $True
}

ListOfmembers输出:

samid: user05_t

samid: user23_s

samid: Admin

samid: user45_s

dsget succeeded

任何帮助将不胜感激,干杯。

3 个答案:

答案 0 :(得分:1)

$member = Get-ADGroupMember group1 -Recursive | where {$_.samaccountname -eq 'user1'}
if($member) {'user 1 is a member of group1'}

答案 1 :(得分:0)

你可以这样做:

[reflection.assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement")
$username = "samaccountname"
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ct, $username)
$g =  $user.GetGroups()
( $g | select -expa name ) -contains 'groupname'

答案 2 :(得分:0)

你应该结帐QAD:http://www.quest.com/powershell/activeroles-server.aspx

$ user get-qaduser samAccountName $ user.memberof