Skip to content
February 27, 2026 Junior (1-3 years) Script Drop

Active Directory Group Management Scripts

PowerShell scripts for managing Active Directory groups. Add/remove members, create groups, and bulk operations.

Active Directory Group Management Scripts

Managing AD groups is a daily task. These scripts make it fast and consistent.

Add User to Group

<#
.SYNOPSIS
    Add user to security group
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$Username,
    
    [Parameter(Mandatory=$true)]
    [string]$GroupName
)

try {
    Add-ADGroupMember -Identity $GroupName -Members $Username -ErrorAction Stop
    Write-Host "Added $Username to $GroupName" -ForegroundColor Green
}
catch {
    Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
}

Remove User from Group

<#
.SYNOPSIS
    Remove user from group
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$Username,
    
    [Parameter(Mandatory=$true)]
    [string]$GroupName
)

Remove-ADGroupMember -Identity $GroupName -Members $Username -Confirm:$false
Write-Host "Removed $Username from $GroupName"

List Group Members

<#
.SYNOPSIS
    Get all members of a group
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$GroupName
)

Get-ADGroupMember -Identity $GroupName | 
    Select-Object Name, SamAccountName, objectClass |
    Format-Table

Create Group with Owners

<#
.SYNOPSIS
    Create AD security group
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$GroupName,
    
    [Parameter(Mandatory=$true)]
    [string]$Description,
    
    [Parameter(Mandatory=$false)]
    [string]$OU = "CN=Users"
)

$Params = @{
    Name = $GroupName
    SamAccountName = $GroupName
    GroupCategory = "Security"
    GroupScope = "Global"
    Description = $Description
    Path = "OU=Groups,$((Get-ADDomain).DistinguishedName)"
    DisplayName = $GroupName
}

New-ADGroup @Params
Write-Host "Created group: $GroupName"

Bulk Add Members from CSV

<#
.SYNOPSIS
    Add multiple users to group from CSV
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$GroupName,
    
    [Parameter(Mandatory=$true)]
    [string]$CSVPath
)

$Members = Import-Csv $CSVPath

foreach ($Member in $Members) {
    try {
        Add-ADGroupMember -Identity $GroupName -Members $Member.Username -ErrorAction Stop
        Write-Host "Added: $($Member.Username)" -ForegroundColor Green
    }
    catch {
        Write-Host "Failed: $($Member.Username) - $($_.Exception.Message)" -ForegroundColor Red
    }
}

Find Empty Groups

<#
.SYNOPSIS
    Find groups with no members
#>

Get-ADGroup -Filter * | Where-Object {
    (Get-ADGroupMember -Identity $_.SamAccountName -ErrorAction SilentlyContinue).Count -eq 0
} | Select-Object Name, SamAccountName

Group Membership Report

<#
.SYNOPSIS
    Generate group membership report
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$OutputPath
)

$Groups = Get-ADGroup -Filter *

$Report = foreach ($Group in $Groups) {
    $Members = Get-ADGroupMember -Identity $Group.SamAccountName -ErrorAction SilentlyContinue
    
    [PSCustomObject]@{
        GroupName = $Group.Name
        MemberCount = $Members.Count
        Members = ($Members.Name -join ", ")
    }
}

$Report | Export-Csv -Path $OutputPath -NoTypeInformation
Write-Host "Report saved to: $OutputPath"

Wrap-Up

These scripts cover the most common AD group operations. Save them to your toolkit.

Questions? Drop them below!

Was this helpful?

Comments

Comments are coming soon. Have feedback? Reach out via the About page.