Private/Clear-TestAccounts.ps1

function Clear-TestAccounts {
  # .SYNOPSIS
  # Cleanup script for test users and groups
  # .DESCRIPTION
  # This script removes all test users and groups from the local machine.
  # .EXAMPLE
  # Clear-TestAccounts
  # .NOTES
  # Run this as Administrator
  [CmdletBinding(SupportsShouldProcess = $true)]
  param ()

  begin {
    $usersToRemove = @(
      'ArrayUser1', 'ArrayUser2', 'ArrayUser3',
      'ErrorUser1', 'IntegrationUser1', 'MemberUser1',
      'PipelineUser1', 'SidUser1', 'TestUserMember2',
      'TestUserNew1', 'TestUserRename2', 'WildcardUser1',
      'WildcardUser2', 'WildcardUser3'
    )

    $groupsToRemove = @(
      'ArrayGroup1', 'ArrayGroup2', 'ArrayGroup3',
      'MemberGroup1', 'PipelineGroup1', 'SidGroup1',
      'TestGroupAddRemove', 'TestGroupRemoveMember2',
      'TestGroupRename2', 'WildcardGroup1', 'WildcardGroup2',
      'WildcardGroup3'
    )
  }

  process {
    Write-Host "Cleaning up test users..." -ForegroundColor Cyan

    foreach ($u in $usersToRemove) {
      try {
        $user = Get-LocalUser $u -ErrorAction Stop
        Remove-LocalUser -SID $user.SID -ErrorAction Stop
        Write-Host " Removed user: $u" -ForegroundColor Green
      } catch {
        Write-Host " User '$u' not found or could not be removed: $($_.Exception.Message)" -ForegroundColor Yellow
      }
    }

    Write-Host "Cleaning up test groups..." -ForegroundColor Cyan

    foreach ($g in $groupsToRemove) {
      try {
        $group = Get-LocalUserGroup $g -ErrorAction Stop
        Remove-LocalUserGroup -SID $group.SID -ErrorAction Stop
        Write-Host " Removed group: $g" -ForegroundColor Green
      } catch {
        Write-Host " Group '$g' not found or could not be removed: $($_.Exception.Message)" -ForegroundColor Yellow
      }
    }
  }

  end {
    Write-Host "`nCleanup complete!" -ForegroundColor Cyan
  }
}