Public/Get-GroupMembers.ps1

<#
    .DESCRIPTION
    Get a list of Active Directory groups and the Members of those groups
 
    .PARAMETER Path
    Specifies the export directory and filename for the report
 
    .PARAMETER Searchbase
    A distinguished name for an OU path.
 
    .NOTES
    Requires Active Directory and ImportExcel Modules
 
    .Example
    Get-GroupMembers -Path "$env:USERPROFILE\downloads\AD Group Members.xlsx" -searchbase "OU=Security Groups,DC=company,DC=net"
 
    .Link
    https://github.com/TheTaylorLee/AdminToolbox
#>


Function Get-GroupMembers {

    [CmdletBinding()]

    Param (
        [Parameter(Mandatory = $false)]$Path = "$env:USERPROFILE\downloads\AD Group Members.xlsx",
        [Parameter(Mandatory = $false)]$Searchbase
    )

    $ErrorActionPreference = 'silentlycontinue'

    if ($searchbase) {
        Get-ADGroup -Filter * -searchbase $Searchbase | Sort-Object Name | ForEach-Object { Get-ADGroupMember -Identity $_.distinguishedName |
            Select-Object objectClass, name, SamAccountName, @{name = "AccountStatus"; Expression = ( { $status = Get-ADUser $_.SamAccountName | Select-Object Enabled; $status.Enabled }) }, distinguishedName, objectGUID |
            Export-Excel -FreezeTopRow -WorksheetName $_.name -TableName $_.name -Path $Path
        }
    }
    else {
        Get-ADGroup -Filter * | Sort-Object Name | ForEach-Object { Get-ADGroupMember -Identity $_.distinguishedName |
            Select-Object objectClass, name, SamAccountName, @{name = "AccountStatus"; Expression = ( { $status = Get-ADUser $_.SamAccountName | Select-Object Enabled; $status.Enabled }) }, distinguishedName, objectGUID |
            Export-Excel -FreezeTopRow -WorksheetName $_.name -TableName $_.name -Path $Path
        }
    }
    $ErrorActionPreference = 'continue'
}