public/List-Users.ps1

function List-Users {

    param (
        [Parameter(Mandatory=$true)]
        [string]$Group
        )


# Put all members of group in to a variable
$GroupMembers = Get-ADGroupMember -Identity $Group

# Prepare a blank array
$UsersToList = @()

# As Get-ADGroupMember does not return the "description" field we will need to loop through and Get-ADUser on each group member to get all their properties
Foreach ($User in $GroupMembers) {
    
    # Set the current value in the pipe line to $User
    $_ = $User

    # Get the ADUser using their account name
    $User = Get-ADUser -Filter {samaccountname -eq $_.SamAccountName -and enabled -eq $true} -Properties *

    # Add them to the emtpy array created earlier
    $UsersToList += $User

    }


# Do some super magic formatting!
       # Sort by description and then by name
       # Put in a table and group by description
            # If they are a student then change the group heading to "Year Group" from "Description"
            # Else assume they are staff and change the group heading to "Role" from "Description"
       # Change property name (SamAccountName to Username)
# Output to a text file on the desktop
If ($Group -like "Student*") {
    
    $UsersToList |
    Sort-Object @{expression=”Description”;Ascending=$true},
                @{expression=”Name”;Ascending=$true} |
    Format-Table -AutoSize -GroupBy @{Name="Year Group";Expression='Description'} -Property `
    @{Label="Name";Expression={$_.Name}},
    @{Label="Username";Expression={$_.SamAccountName}} |
    Out-File "$HOME\Desktop\$Group User List.txt"

    } else {

    $UsersToList |
    Sort-Object @{expression=”Description”;Ascending=$true},
                @{expression=”Name”;Ascending=$true} |
    Format-Table -AutoSize -GroupBy @{Name="Role";Expression='Description'} -Property `
    @{Label="Name";Expression={$_.Name}},
    @{Label="Username";Expression={$_.SamAccountName}} |
    Out-File "$HOME\Desktop\$Group User List.txt"

    }


}