ADGroupMemberObjects.psm1
function Get-ADGroupMemberObjects { [CmdletBinding(ConfirmImpact = 'Low')] param( [parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$GroupName, [string[]]$ObjectClasses = ("user", "contact") ) $GroupDN = Get-ADGroup $GroupName | Select-Object -ExpandProperty distinguishedName return (Get-ADObject $GroupDN -Properties member).member | Get-ADObject -Properties ObjectClass, sAMAccountName, DisplayName, Department, Manager | Where-Object -Property ObjectClass -in $ObjectClasses | Select-Object sAMAccountName, DisplayName, Department, @{l = "Manager"; e = { (Get-ADObject $_.Manager -Properties DisplayName).DisplayName } } } function Export-ADGroupMemberObjects { [CmdletBinding(ConfirmImpact = 'Low')] param( [parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$GroupName, [string[]]$ObjectClasses = ("user", "contact"), [parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$FileName ) $ADGroupMemberObjects = Get-ADGroupMemberObjects -GroupName $GroupName -ObjectClasses $ObjectClasses $ADGroupMemberObjects | Format-Table sAMAccountName, DisplayName, Department, Manager $ADGroupMemberObjects | Export-csv $FileName -NoTypeInformation } $GroupNameArgumentCompleter = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $groups = Get-ADGroup -Filter "Name -like '$wordToComplete*'" $groups | ForEach-Object { New-Object -Type System.Management.Automation.CompletionResult -ArgumentList "'$($_.Name)'", $_.Name, "ParameterValue", $_.Name } } Register-ArgumentCompleter -CommandName Get-ADGroupMemberObjects -ParameterName GroupName -ScriptBlock $GroupNameArgumentCompleter Register-ArgumentCompleter -CommandName Export-ADGroupMemberObjects -ParameterName GroupName -ScriptBlock $GroupNameArgumentCompleter Export-ModuleMember -Function @('Get-ADGroupMemberObjects') Export-ModuleMember -Function @('Export-ADGroupMemberObjects') |