Skip to content

Instantly share code, notes, and snippets.

@CosmosKey
Created February 27, 2018 23:54
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save CosmosKey/a2ea626afa728be0631799759e310c33 to your computer and use it in GitHub Desktop.
Save CosmosKey/a2ea626afa728be0631799759e310c33 to your computer and use it in GitHub Desktop.
Get-ADGroupMemberSamAccountName
Function Get-ADGroupMemberSamAccountName {
param(
[Parameter(Mandatory,ValueFromPipeline)]
[ValidateNotNullOrEmpty()]
[string]$GroupName
)
process {
$name = $GroupName
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$dc = $domain.FindDomainController([System.DirectoryServices.ActiveDirectory.LocatorOptions]::WriteableRequired)
$rootDn = $domain.GetDirectoryEntry().DistinguishedName
$ldapConnection = [System.DirectoryServices.Protocols.LdapConnection]::new($dc.Name)
$groupSearchRequest = [System.DirectoryServices.Protocols.SearchRequest]::new()
$groupSearchRequest.DistinguishedName = $rootDn
$groupSearchRequest.Filter = "(samaccountname=$name)"
$groupSearchRequest.Attributes.Clear()
$groupSearchRequest.Attributes.Add("1.1") | Out-Null
$groupSearchResult = $ldapConnection.SendRequest($groupSearchRequest)
if($groupSearchResult.ResultCode -eq 'Success' -and $groupSearchResult.Entries[0] -ne $null){
$groupDN = $groupSearchResult.Entries[0].DistinguishedName
$pageRequestControl = [System.DirectoryServices.Protocols.PageResultRequestControl]::new(1000)
$asqRequestControl = [System.DirectoryServices.Protocols.AsqRequestControl]::new('member')
$memberSearchRequest = [System.DirectoryServices.Protocols.SearchRequest]::new()
$memberSearchRequest.DistinguishedName = $groupDN
$memberSearchRequest.Scope = [System.DirectoryServices.Protocols.SearchScope]::Base
$memberSearchRequest.Filter = "(objectclass=person)"
$memberSearchRequest.Attributes.Clear() | Out-Null
$memberSearchRequest.Attributes.Add('samaccountname') | Out-Null
$memberSearchRequest.Controls.Add($asqRequestControl) | Out-Null
$memberSearchRequest.Controls.Add($pageRequestControl) | Out-Null
do {
$memberSearchResult = $ldapConnection.SendRequest($memberSearchRequest)
$pageResultResponse = $memberSearchResult.Controls | Where-Object {$_ -is [System.DirectoryServices.Protocols.PageResultResponseControl]}
$pageRequestControl.Cookie = $pageResultResponse.Cookie
$memberSearchResult.Entries | ForEach-Object {
$_.Attributes['samaccountname'].GetValues([string])
}
} while($pageResultResponse.Cookie.Count -ne 0)
} else {
throw "A single group named $name was not found"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment