This is a simple PowerShell GUI script, using WinForms with a datagrid, which allows normal users to view AD group members, and if they have the delegated admin or group owner permissions, add or remove members.
.ps1 file and run it in PowerShell. The GUI will open, allowing you to enter the username and group name.Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Create the form
$form = New-Object System.Windows.Forms.Form
$form.Text = "Manage AD Group"
$form.Size = New-Object System.Drawing.Size(800,500)
# Create a label and textbox for the username
$labelUser = New-Object System.Windows.Forms.Label
$labelUser.Text = "Username:"
$labelUser.Location = New-Object System.Drawing.Point(10,20)
$form.Controls.Add($labelUser)
$textBoxUser = New-Object System.Windows.Forms.TextBox
$textBoxUser.Location = New-Object System.Drawing.Point(110,20)
$textBoxUser.Size = New-Object System.Drawing.Size(250,20)
$form.Controls.Add($textBoxUser)
# Create a label and textbox for the group name
$labelGroup = New-Object System.Windows.Forms.Label
$labelGroup.Text = "Group Name:"
$labelGroup.Location = New-Object System.Drawing.Point(10,60)
$form.Controls.Add($labelGroup)
$textBoxGroup = New-Object System.Windows.Forms.TextBox
$textBoxGroup.Location = New-Object System.Drawing.Point(110,60)
$textBoxGroup.Size = New-Object System.Drawing.Size(250,20)
$form.Controls.Add($textBoxGroup)
# Create a DataGridView to display group members
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Location = New-Object System.Drawing.Point(10,100)
$dataGridView.Size = New-Object System.Drawing.Size(750,250)
$dataGridView.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnsMode]::Fill
$dataGridView.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right
$form.Controls.Add($dataGridView)
# Label to display total user count
$labelTotalUsers = New-Object System.Windows.Forms.Label
$labelTotalUsers.Location = New-Object System.Drawing.Point(10,360)
$labelTotalUsers.Size = New-Object System.Drawing.Size(750,20)
$labelTotalUsers.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right
$form.Controls.Add($labelTotalUsers)
# Label to display error messages
$labelError = New-Object System.Windows.Forms.Label
$labelError.Location = New-Object System.Drawing.Point(10,390)
$labelError.Size = New-Object System.Drawing.Size(750,40)
$labelError.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right
$form.Controls.Add($labelError)
# Add User button
$buttonAdd = New-Object System.Windows.Forms.Button
$buttonAdd.Text = "Add User"
$buttonAdd.Location = New-Object System.Drawing.Point(380,20)
$buttonAdd.Add_Click({
$username = $textBoxUser.Text
$groupname = $textBoxGroup.Text
$labelError.Text = ""
if ([string]::IsNullOrWhiteSpace($username) -or [string]::IsNullOrWhiteSpace($groupname)) {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Please enter both a username and a group name."
} else {
try {
Add-ADGroupMember -Identity $groupname -Members $username
$labelError.ForeColor = [System.Drawing.Color]::Green
$labelError.Text = "User $($textBoxUser.Text) added to group successfully!"
ShowGroupMembers
} catch {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Error adding user to group: $_"
}
}
})
$form.Controls.Add($buttonAdd)
# Remove User button
$buttonRemove = New-Object System.Windows.Forms.Button
$buttonRemove.Text = "Remove User"
$buttonRemove.Location = New-Object System.Drawing.Point(480,20)
$buttonRemove.Size = New-Object System.Drawing.Size(90,20)
$buttonRemove.Add_Click({
$username = $textBoxUser.Text
$groupname = $textBoxGroup.Text
$labelError.Text = ""
if ([string]::IsNullOrWhiteSpace($username) -or [string]::IsNullOrWhiteSpace($groupname)) {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Please enter both a username and a group name."
} else {
try {
Remove-ADGroupMember -Identity $groupname -Members $username -Confirm:$false
$labelError.ForeColor = [System.Drawing.Color]::Green
$labelError.Text = "User $($textBoxUser.Text) removed from group successfully!"
ShowGroupMembers
} catch {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Error removing user from group: $_"
}
}
})
$form.Controls.Add($buttonRemove)
# Show Users button
$buttonShow = New-Object System.Windows.Forms.Button
$buttonShow.Text = "Show Users"
$buttonShow.Location = New-Object System.Drawing.Point(380,60)
$buttonShow.Add_Click({ ShowGroupMembers })
$form.Controls.Add($buttonShow)
# Function to show group members
function ShowGroupMembers {
$groupname = $textBoxGroup.Text
if ([string]::IsNullOrWhiteSpace($groupname)) {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Please enter a group name."
} else {
try {
$groupMembers = Get-ADGroupMember -Identity $groupname | Get-ADUser | Sort-Object SamAccountName
$dataTable = New-Object System.Data.DataTable
$dataTable.Columns.Add("SamAccountName")
$dataTable.Columns.Add("UserPrincipalName")
$dataTable.Columns.Add("OU")
foreach ($member in $groupMembers) {
if ($member.distinguishedName -match "OU=([^,]+)") {
$firstOU = $matches[1]
} else {
$firstOU = "N/A"
}
$row = $dataTable.NewRow()
$row["SamAccountName"] = $member.SamAccountName
$row["UserPrincipalName"] = $member.UserPrincipalName
$row["OU"] = $firstOU
$dataTable.Rows.Add($row)
}
$dataGridView.DataSource = $dataTable
$labelTotalUsers.Text = "Total Users: " + $dataTable.Rows.Count
} catch {
$labelError.ForeColor = [System.Drawing.Color]::Red
$labelError.Text = "Error retrieving group members: $_"
}
}
}
# Show the form
$form.ShowDialog()
This PowerShell script provides a powerful and user-friendly way to manage AD group members. With its intuitive GUI, real-time updates, and robust error handling, it simplifies the process of managing AD groups and enhances efficiency. Whether you’re an IT professional or a system administrator, this script is a valuable tool for managing your Active Directory environment.