202 lines
7.4 KiB
PowerShell
202 lines
7.4 KiB
PowerShell
Add-Type -AssemblyName System.Windows.Forms
|
|
|
|
#Set Domain Controller Variable
|
|
|
|
$domaincontroller = "fqdn.domain.placeholder" ##################### UPDATE THIS LINE #####################
|
|
|
|
# Create a form
|
|
$form = New-Object Windows.Forms.Form
|
|
$form.Text = "Compare AD Group Memberships"
|
|
$form.Width = 600
|
|
$form.Height = 900
|
|
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
|
|
|
|
# Signature for UPNs
|
|
$labelSignature = New-Object Windows.Forms.Label
|
|
$labelSignature.Text = "Made by Zak Bearman - Intel"
|
|
$labelSignature.Location = New-Object Drawing.Point(10, 832)
|
|
$form.Controls.Add($labelSignature)
|
|
|
|
# Labels and Textboxes for UPNs
|
|
$labelPrimaryUser = New-Object Windows.Forms.Label
|
|
$labelPrimaryUser.Text = "Primary User UPN:"
|
|
$labelPrimaryUser.Location = New-Object Drawing.Point(10, 23)
|
|
$form.Controls.Add($labelPrimaryUser)
|
|
|
|
$textBoxPrimaryUser = New-Object Windows.Forms.TextBox
|
|
$textBoxPrimaryUser.Location = New-Object Drawing.Point(120, 20)
|
|
$textBoxPrimaryUser.Width = 200
|
|
$form.Controls.Add($textBoxPrimaryUser)
|
|
|
|
# ComboBox for selecting the number of users to compare against
|
|
$labelNumUsers = New-Object Windows.Forms.Label
|
|
$labelNumUsers.Text = "How many other users?"
|
|
$labelNumUsers.Location = New-Object Drawing.Point(10, 50)
|
|
$form.Controls.Add($labelNumUsers)
|
|
|
|
$comboBoxNumUsers = New-Object Windows.Forms.ComboBox
|
|
$comboBoxNumUsers.Location = New-Object Drawing.Point(250, 50)
|
|
$comboBoxNumUsers.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
|
|
$comboBoxNumUsers.Items.Add("1")
|
|
$comboBoxNumUsers.Items.Add("2")
|
|
$comboBoxNumUsers.Items.Add("3")
|
|
$comboBoxNumUsers.SelectedIndex = 0
|
|
$form.Controls.Add($comboBoxNumUsers)
|
|
|
|
# GroupBox for UPNs of users to compare against
|
|
$groupBoxUsers = New-Object Windows.Forms.GroupBox
|
|
$groupBoxUsers.Text = "Users to Compare Against:"
|
|
$groupBoxUsers.Location = New-Object Drawing.Point(10, 80)
|
|
$groupBoxUsers.Width = 340
|
|
$groupBoxUsers.Height = 100
|
|
$form.Controls.Add($groupBoxUsers)
|
|
|
|
# Textboxes for entering UPNs based on the selected number of users
|
|
$textBoxUser1 = New-Object Windows.Forms.TextBox
|
|
$textBoxUser1.Location = New-Object Drawing.Point(10, 20)
|
|
$textBoxUser1.Width = 200
|
|
$groupBoxUsers.Controls.Add($textBoxUser1)
|
|
|
|
$textBoxUser2 = New-Object Windows.Forms.TextBox
|
|
$textBoxUser2.Location = New-Object Drawing.Point(10, 50)
|
|
$textBoxUser2.Width = 200
|
|
$textBoxUser2.Visible = $false
|
|
$groupBoxUsers.Controls.Add($textBoxUser2)
|
|
|
|
$textBoxUser3 = New-Object Windows.Forms.TextBox
|
|
$textBoxUser3.Location = New-Object Drawing.Point(10, 80)
|
|
$textBoxUser3.Width = 200
|
|
$textBoxUser3.Visible = $false
|
|
$groupBoxUsers.Controls.Add($textBoxUser3)
|
|
|
|
# Button to initiate comparison
|
|
$buttonCompare = New-Object Windows.Forms.Button
|
|
$buttonCompare.Text = "Compare"
|
|
$buttonCompare.Location = New-Object Drawing.Point(120, 195)
|
|
$form.Controls.Add($buttonCompare)
|
|
|
|
# Help button to display usage instructions
|
|
$buttonHelp = New-Object Windows.Forms.Button
|
|
$buttonHelp.Text = "Click Me"
|
|
$buttonHelp.Location = New-Object Drawing.Point(215, 195)
|
|
$form.Controls.Add($buttonHelp)
|
|
|
|
# Scrollable and selectable textbox for displaying output
|
|
$textBoxOutput = New-Object Windows.Forms.TextBox
|
|
$textBoxOutput.Location = New-Object Drawing.Point(10, 230)
|
|
$textBoxOutput.Width = 560
|
|
$textBoxOutput.Height = 600
|
|
$textBoxOutput.Multiline = $true
|
|
$textBoxOutput.ScrollBars = "Vertical"
|
|
$textBoxOutput.ReadOnly = $true
|
|
$form.Controls.Add($textBoxOutput)
|
|
|
|
# Event handler for the ComboBox selection change
|
|
$comboBoxNumUsers.Add_SelectedIndexChanged({
|
|
$numUsers = [int]$comboBoxNumUsers.SelectedItem
|
|
|
|
# Show/hide textboxes based on the selected number of users
|
|
$textBoxUser1.Visible = $numUsers -ge 1
|
|
$textBoxUser2.Visible = $numUsers -ge 2
|
|
$textBoxUser3.Visible = $numUsers -ge 3
|
|
})
|
|
|
|
# Event handler for the Compare button
|
|
$buttonCompare.Add_Click({
|
|
# Get the entered UPNs and the selected number of users
|
|
$primaryUserUPN = $textBoxPrimaryUser.Text
|
|
$numUsers = [int]$comboBoxNumUsers.SelectedItem
|
|
|
|
# Get the UPNs of the users to compare against based on the selected number
|
|
$usersToCompareUPNs = @()
|
|
if ($textBoxUser1.Visible) { $usersToCompareUPNs += $textBoxUser1.Text }
|
|
if ($textBoxUser2.Visible) { $usersToCompareUPNs += $textBoxUser2.Text }
|
|
if ($textBoxUser3.Visible) { $usersToCompareUPNs += $textBoxUser3.Text }
|
|
|
|
# Function to get group memberships for a user using UPN
|
|
function Get-ADUserGroupsByUPN {
|
|
param (
|
|
[string]$userUPN
|
|
)
|
|
|
|
$user = Get-ADUser -Filter { UserPrincipalName -eq $userUPN } -Server $domaincontroller
|
|
if ($user) {
|
|
$groups = Get-ADPrincipalGroupMembership -Identity $user -Server $domaincontroller
|
|
return $groups | Select-Object -ExpandProperty Name
|
|
} else {
|
|
Write-Host "User with UPN $userUPN not found."
|
|
return $null
|
|
}
|
|
}
|
|
|
|
# Get group memberships for the primary user
|
|
$primaryUserGroups = Get-ADUserGroupsByUPN -userUPN $primaryUserUPN
|
|
|
|
if ($primaryUserGroups -ne $null) {
|
|
# Compare group memberships for the primary user with other users
|
|
$missingGroups = @()
|
|
|
|
foreach ($userUPN in $usersToCompareUPNs) {
|
|
$userGroups = Get-ADUserGroupsByUPN -userUPN $userUPN
|
|
if ($userGroups -ne $null) {
|
|
foreach ($group in $userGroups) {
|
|
if ($primaryUserGroups -notcontains $group -and $missingGroups -notcontains $group) {
|
|
$missingGroups += $group
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Display the missing groups in the output textbox
|
|
if ($missingGroups.Count -gt 0) {
|
|
$missingGroupsText = $missingGroups -join "`r`n"
|
|
$textBoxOutput.Text = "Groups missing for $primaryUserUPN compared to the other users:`r`n`r`n$missingGroupsText"
|
|
} else {
|
|
$textBoxOutput.Text = "No missing groups found for $primaryUserUPN."
|
|
}
|
|
}
|
|
})
|
|
|
|
# Event handler for the Help button
|
|
$buttonHelp.Add_Click({
|
|
# Display usage instructions in a new window
|
|
$helpForm = New-Object Windows.Forms.Form
|
|
$helpForm.Text = "Usage Instructions"
|
|
$helpForm.Width = 400
|
|
$helpForm.Height = 350
|
|
|
|
$helpLabel = New-Object Windows.Forms.Label
|
|
$helpLabel.Text = "Instructions:"
|
|
$helpLabel.Location = New-Object Drawing.Point(10, 10)
|
|
$helpForm.Controls.Add($helpLabel)
|
|
|
|
$helpText = @"
|
|
1. Enter the UPN of the primary user in the 'Primary User UPN' field.
|
|
|
|
2. Select the number of users to compare against from the dropdown 1, 2 or 3.
|
|
|
|
3. Enter the UPNs of the users to compare against in the 'Users to Compare Against' section.
|
|
|
|
4. Click the 'Compare' button to compare group memberships that the primary user is missing.
|
|
|
|
5. The results will be displayed in the textbox below. Find the membership that is most likely what they need and apply this in AD.
|
|
|
|
6. If this is an admin account, Please supply this information to Wintel via the ticket to be actioned accordingly.
|
|
"@
|
|
$helpTextBox = New-Object Windows.Forms.TextBox
|
|
$helpTextBox.Location = New-Object Drawing.Point(10, 40)
|
|
$helpTextBox.Width = 360
|
|
$helpTextBox.Height = 250
|
|
$helpTextBox.Multiline = $true
|
|
$helpTextBox.ScrollBars = "Vertical"
|
|
$helpTextBox.Text = $helpText
|
|
$helpTextBox.ReadOnly = $true
|
|
$helpForm.Controls.Add($helpTextBox)
|
|
|
|
$helpForm.ShowDialog()
|
|
})
|
|
|
|
# Show the form
|
|
$form.ShowDialog()
|
|
|
|
# Disclaimer: TWFkZSBieSBaYWsgQmVhcm1hbiAtIERhdGFjb20gV2ludGVsIC0gUHJvdmlkZWQgYXMgaXMgd2hlcmUgaXMuIElmIGJyb2tlbiB3aWxsIGJlIGxvb2tlZCBhdCBpbiBhIGJlc3QgZWZmb3J0IGF0dGVtcHQ= |