BulkCreateM365Users.ps1


<#PSScriptInfo
 
.VERSION 1.1
 
.GUID 07c3305d-8ffb-43cb-8830-9a5c40582a1b
 
.AUTHOR Paul van Boerdonk
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
.PRIVATEDATA
 
#>


<#
.SYNOPSIS
    This script bulk creates a specified number of dummy users in your Microsoft 365 tenant.
 
.DESCRIPTION
    This script uses the Microsoft.Graph.Users module to create a specified number of dummy users in your Microsoft 365 tenant.
     
    The script generates random first and last names for each user and sets a per-user randomly generated password.
 
.PARAMETER NumberOfUsers
    The number of users to create.
 
.EXAMPLE
    BulkCreateM365Users.ps1 -NumberOfUsers 10
    This command creates 10 dummy users in your Microsoft 365 tenant.
 
.NOTES
    File Name : BulkCreateM365Users.ps1
    Author : Paul van Boerdonk
    Prerequisite : PowerShell 7.1 or later
#>



# Set the number of users to create

param (
    [Parameter(Mandatory = $true)]
    [int]$NumberOfUsers
)

Write-Host "
////////////////////////////////////////////////////////
// //
// ____ _ _ ____ _ //
// | __ ) _ _| | | __/ ___|_ __ ___ __ _| |_ ___ //
// | _ \| | | | | |/ / | | '__/ _ \/ _` | __/ _ \ //
// | |_) | |_| | | <| |___| | | __/ (_| | || __/ //
// |____/ \__,_|_|_|\_\\____|_| \___|\__,_|\__\___| //
// __ __ _____ __ ____ _ _ //
// | \/ |___ / / /_| ___|| | | |___ ___ _ __ ___ //
// | |\/| | |_ \| '_ \___ \| | | / __|/ _ \ '__/ __| //
// | | | |___) | (_) |__) | |_| \__ \ __/ | \__ \ //
// |_| |_|____/ \___/____/ \___/|___/\___|_| |___/ //
// //
// //
////////////////////////////////////////////////////////
 
    File Name : BulkCreateM365Users.ps1
    Author : Paul van Boerdonk
    Version : 1.1
    Prerequisite : PowerShell 7.1 or later
"


# Install the Microsoft.Graph.Users module if you haven't already

if (-not (Get-Module -Name Microsoft.Graph.Users -ListAvailable)) {
    Write-Host "Microsoft.Graph.Users module not found. Installing the module..."
    Install-Module -Name Microsoft.Graph.Users -Scope CurrentUser -Force -AllowClobber
}
else {
    Write-Host "Microsoft.Graph.Users module found. Importing the module..."
    Import-Module Microsoft.Graph.Users
}

# Check if already logged in to Microsoft Graph and disconnect if needed
try {
    Get-MgUser -ErrorAction Stop | Out-Null
    Disconnect-MgGraph | Out-Null
    Write-Host "Already logged in to Microsoft Graph, disconnected from the existing session."
}
catch {
    Write-Host "No existing Microsoft Graph connection."
}

# Authenticate to Microsoft Graph
Write-Host "Authenticate by signing in to your Microsoft 365 tenant..."
Connect-MgGraph -Scopes "User.ReadWrite.All" -NoWelcome
$domain = (Get-MgOrganization).VerifiedDomains[0].name

Write-Host "Default domain: $domain"

# Function to create a dummy user
function New-DummyUser {
    param (
        [string]$UserName,
        [string]$DisplayName,
        [string]$Password
    )

    New-MgUser -AccountEnabled `
        -DisplayName $DisplayName `
        -MailNickname $UserName `
        -Mail "$UserName@$domain" `
        -UserPrincipalName "$UserName@$domain" `
        -PasswordProfile @{ Password = $Password; ForceChangePasswordNextSignIn = $false } `
        -ErrorAction Stop
}


# Function to generate a random password
function Get-RandomPassword {
    $length = 16
    $chars = @()
    $chars += [char[]](65..90)  # Uppercase A-Z
    $chars += [char[]](97..122) # Lowercase a-z
    $chars += [char[]](48..57)  # Numbers 0-9
    $specialChars = "!@#$%^&*()-_=+[]{}|;:,.<>?/"
    $chars += [char[]]$specialChars

    $password = -join ((1..$length) | ForEach-Object { $chars | Get-Random })
    return $password
}



# Function to generate a random name
function Get-RandomName {
    $firstNames = @(
        "Aaron", "Abigail", "Adam", "Adrian", "Aiden", "Ainsley", "Alana", "Albert", "Alec", "Alexa",
        "Alexander", "Alexandra", "Alexis", "Alice", "Alicia", "Allison", "Alyssa", "Amanda", "Amber", "Amelia",
        "Amy", "Andrea", "Andrew", "Angela", "Angelina", "Anna", "Anthony", "April", "Ariana", "Arianna",
        "Ashley", "Ashton", "Aubrey", "Audrey", "Austin", "Autumn", "Ava", "Avery", "Bailey", "Barbara",
        "Beatrice", "Becky", "Benjamin", "Bennett", "Beth", "Bethany", "Bianca", "Blake", "Blanca", "Braden",
        "Bradley", "Brady", "Brandon", "Brayden", "Brenda", "Briana", "Brianna", "Brian", "Brielle", "Brittany",
        "Brody", "Brooke", "Brooklyn", "Bryan", "Bryce", "Brynn", "Caden", "Caitlin", "Caleb", "Callie",
        "Cameron", "Camila", "Carlos", "Caroline", "Carter", "Casey", "Cassandra", "Catherine", "Cecilia", "Celeste",
        "Charles", "Charlotte", "Chase", "Chelsea", "Chloe", "Christian", "Christina", "Christopher", "Claire", "Clara",
        "Clarissa", "Clayton", "Cody", "Colby", "Cole", "Colin", "Collin", "Connor", "Cooper", "Courtney",
        "Cristian", "Crystal", "Curtis", "Cynthia", "Daisy", "Dakota", "Dalton", "Damian", "Daniel", "Daniela",
        "Danielle", "David", "Dawn", "Dean", "Deanna", "Deborah", "Declan", "Delaney", "Derek", "Desiree",
        "Destiny", "Devin", "Diana", "Diego", "Dominic", "Donovan", "Dylan", "Easton", "Eden", "Edward",
        "Edwin", "Eleanor", "Elena", "Eli", "Eliana", "Elias", "Elijah", "Elise", "Elizabeth", "Ella",
        "Elliot", "Elliott", "Ellis", "Emily", "Emma", "Emmanuel", "Emmett", "Eric", "Erica", "Erik",
        "Erin", "Esmeralda", "Ethan", "Eva", "Evan", "Evelyn", "Everett", "Faith", "Felicity", "Fernando",
        "Fiona", "Gabriel", "Gabriella", "Gabrielle", "Gage", "Garrett", "Gavin", "Genesis", "Genevieve", "George",
        "Georgia", "Gianna", "Giselle", "Grace", "Gracie", "Grayson", "Gregory", "Gretchen", "Hailey", "Haley",
        "Hannah", "Harper", "Harrison", "Hayden", "Heather", "Heidi", "Henry", "Holly", "Hope", "Hudson",
        "Hunter", "Ian", "Isaac", "Isabel", "Isabella", "Isabelle", "Isaiah", "Isla", "Ivan", "Ivy",
        "Jack", "Jackson", "Jacob", "Jacqueline", "Jade", "Jaden", "Jake", "James", "Jameson", "Jamie",
        "Jared", "Jasmine", "Jason", "Jasper", "Javier", "Jayden", "Jeffrey", "Jenna", "Jennifer", "Jessica",
        "Jessie", "Jesus", "Jillian", "Joel", "John", "Johnny", "Jonah", "Jonathan", "Jordan", "Jordyn",
        "Jorge", "Jose", "Joseph", "Joshua", "Josiah", "Joy", "Juan", "Judith", "Julia", "Julian",
        "Juliana", "Julie", "Justin", "Kaden", "Kai", "Kaiden", "Kaitlyn", "Kaleb", "Kara", "Karen",
        "Karina", "Karla", "Kate", "Katelyn", "Katherine", "Kathryn", "Katie", "Kayla", "Kaylee", "Keith",
        "Kelsey", "Kendall", "Kennedy", "Kenneth", "Kenzie", "Kevin", "Kiara", "Kimberly", "Kingston", "Kira",
        "Kirsten", "Kylie", "Laila", "Landon", "Laura", "Lauren", "Layla", "Leah", "Leo", "Leonardo",
        "Liam", "Lillian", "Lilly", "Lily", "Lincoln", "Lindsey", "Logan", "London", "Lorenzo", "Louis",
        "Lucas", "Lucy", "Luis", "Luke", "Lydia", "Mackenzie", "Madeline", "Madelyn", "Madison", "Makayla",
        "Makenna", "Malachi", "Malcolm", "Mallory", "Mandy", "Manuel", "Mara", "Marcus", "Margaret", "Maria",
        "Mariah", "Mariana", "Marie", "Marilyn", "Mario", "Marissa", "Mark", "Marshall", "Martha", "Martin",
        "Mary", "Mason", "Mateo", "Matthew", "Maverick", "Max", "Maxwell", "Maya", "Mckenzie", "Megan",
        "Melanie", "Melissa", "Melody", "Mercedes", "Micah", "Michael", "Michelle", "Miguel", "Mila", "Miles",
        "Miley", "Milo", "Miranda", "Molly", "Monica", "Morgan", "Mya", "Myla", "Nadia", "Nancy",
        "Naomi", "Natalia", "Natalie", "Nathan", "Nathaniel", "Nevaeh", "Nicholas", "Nicole", "Nina", "Noah",
        "Nolan", "Nora", "Norah", "Oliver", "Olivia", "Omar", "Owen", "Paige", "Paisley", "Parker",
        "Patrick", "Paul", "Payton", "Penelope", "Peter", "Peyton", "Piper", "Preston", "Quinn", "Rachel",
        "Raegan", "Rafael", "Ralph", "Ramona", "Randall", "Randy", "Raymond", "Reagan", "Rebecca", "Reece",
        "Reese", "Regina", "Reid", "Remington", "Renee", "Rhett", "Ricardo", "Richard", "Riley", "Robert",
        "Roberto", "Rocco", "Roman", "Ronald", "Rory", "Rose", "Rowan", "Ruby", "Russell", "Ruth",
        "Ryan", "Ryder", "Ryker", "Sabrina", "Sadie", "Samantha", "Samuel", "Sandra", "Sara", "Sarah",
        "Savannah", "Sawyer", "Scarlett", "Scott", "Sean", "Sebastian", "Selena", "Serena", "Sergio", "Seth",
        "Shane", "Shannon", "Shawn", "Shelby", "Sienna", "Sierra", "Silas", "Simon", "Skylar", "Sloane",
        "Sofia", "Sophia", "Sophie", "Spencer", "Stella", "Stephanie", "Stephen", "Steven", "Summer", "Sydney",
        "Sylvia", "Talia", "Tamara", "Tanner", "Tara", "Tate", "Taylor", "Teagan", "Tessa", "Theodore",
        "Thomas", "Tiffany", "Timothy", "Tobias", "Travis", "Trenton", "Trevor", "Trinity", "Tristan", "Troy",
        "Tyler", "Valentina", "Valerie", "Vanessa", "Veronica", "Victor", "Victoria", "Vincent", "Violet", "Vivian",
        "Wade", "Walker", "Walter", "Warren", "Waylon", "Wayne", "Wesley", "Weston", "Whitney", "William",
        "Willow", "Wyatt", "Xander", "Xavier", "Yasmin", "Yolanda", "Zachary", "Zane", "Zara", "Zoe"
    )
    $firstName = $firstNames | Get-Random
    
    $lastNames = @(
        "Abbott", "Acevedo", "Acosta", "Adkins", "Aguirre", "Albert", "Alexander", "Alford", "Allison", "Alston",
        "Alvarado", "Andrade", "Anthony", "Atkins", "Avery", "Avila", "Ayala", "Ballard", "Barrera", "Barrios",
        "Barton", "Bass", "Bates", "Battle", "Bauer", "Baxter", "Beard", "Beasley", "Beck", "Becker",
        "Bell", "Bender", "Benjamin", "Benson", "Bentley", "Berg", "Berger", "Bernard", "Berry", "Best",
        "Bird", "Bishop", "Blackburn", "Blake", "Blanchard", "Blankenship", "Blevins", "Bolton", "Bond", "Bonner",
        "Booker", "Boone", "Bowers", "Bowman", "Boyd", "Boyer", "Boyle", "Bradford", "Bradley", "Brady",
        "Branch", "Bray", "Brennan", "Brewer", "Bridges", "Briggs", "Brock", "Brooks", "Brown", "Browning",
        "Bruce", "Bryan", "Bryant", "Buchanan", "Buck", "Buckley", "Bullock", "Burch", "Burgess", "Burke",
        "Burnett", "Burns", "Burris", "Burton", "Bush", "Butler", "Byers", "Byrd", "Caldwell", "Calhoun",
        "Callahan", "Camacho", "Cameron", "Campbell", "Campos", "Cannon", "Cantrell", "Cardenas", "Carey", "Carlson",
        "Carney", "Carpenter", "Carr", "Carrillo", "Carroll", "Carson", "Carter", "Case", "Casey", "Cash",
        "Castaneda", "Castillo", "Castro", "Cervantes", "Chambers", "Chan", "Chandler", "Chaney", "Chang", "Chapman",
        "Charles", "Chase", "Chavez", "Chen", "Cherry", "Christensen", "Christian", "Church", "Clark", "Clarke",
        "Clay", "Clayton", "Clements", "Clemons", "Cline", "Cobb", "Cochran", "Coffey", "Cohen", "Cole",
        "Coleman", "Collier", "Collins", "Colon", "Combs", "Conley", "Conner", "Conrad", "Contreras", "Conway",
        "Cook", "Cooley", "Cooper", "Copeland", "Cortez", "Cote", "Cotton", "Cox", "Craft", "Craig",
        "Crane", "Crawford", "Crosby", "Cross", "Cruz", "Cummings", "Cunningham", "Curry", "Curtis", "Dale",
        "Dalton", "Daniel", "Daniels", "Daugherty", "Davenport", "David", "Davidson", "Davis", "Dawson", "Day",
        "Dean", "Decker", "Dejesus", "Delacruz", "Delaney", "Deleon", "Delgado", "Dennis", "Diaz", "Dickerson",
        "Dickson", "Dillard", "Dillon", "Dixon", "Dodson", "Dominguez", "Donaldson", "Donovan", "Dorsey", "Dotson",
        "Douglas", "Downs", "Doyle", "Drake", "Dudley", "Duffy", "Duke", "Duncan", "Dunlap", "Dunn",
        "Duran", "Durham", "Dyer", "Eaton", "Edwards", "Elliott", "Ellis", "Ellison", "Emerson", "England",
        "English", "Erickson", "Espinoza", "Estes", "Estrada", "Evans", "Everett", "Ewing", "Farley", "Farmer",
        "Farrell", "Faulkner", "Ferguson", "Fernandez", "Ferrell", "Fields", "Figueroa", "Finch", "Finley", "Fischer",
        "Fisher", "Fitzgerald", "Fitzpatrick", "Fleming", "Fletcher", "Flores", "Flowers", "Floyd", "Flynn", "Foley",
        "Forbes", "Ford", "Foreman", "Foster", "Fowler", "Fox", "Francis", "Franco", "Frank", "Franklin",
        "Franks", "Frazier", "Frederick", "Freeman", "French", "Frost", "Fry", "Frye", "Fuentes", "Fuller",
        "Fulton", "Gaines", "Gallagher", "Gallegos", "Galloway", "Gamble", "Garcia", "Gardner", "Garner", "Garrett",
        "Garrison", "Garza", "Gates", "Gay", "Gentry", "George", "Gibbs", "Gibson", "Gilbert", "Giles",
        "Gill", "Gillespie", "Gilliam", "Gilmore", "Glass", "Glenn", "Glover", "Goff", "Golden", "Gomez",
        "Gonzales", "Gonzalez", "Good", "Goodman", "Goodwin", "Gordon", "Gould", "Graham", "Grant", "Graves",
        "Gray", "Green", "Greene", "Greer", "Gregory", "Griffin", "Griffith", "Grimes", "Gross", "Guerra",
        "Guerrero", "Guthrie", "Gutierrez", "Guy", "Guzman", "Hahn", "Hale", "Haley", "Hall", "Hamilton",
        "Hammond", "Hampton", "Hancock", "Haney", "Hansen", "Hanson", "Hardin", "Harding", "Hardy", "Harmon",
        "Harper", "Harrell", "Harrington", "Harris", "Harrison", "Hart", "Hartman", "Harvey", "Hatfield", "Hawkins",
        "Hayden", "Hayes", "Haynes", "Hays", "Head", "Heath", "Hebert", "Henderson", "Hendricks", "Hendrix",
        "Henry", "Hensley", "Henson", "Herman", "Hernandez", "Herrera", "Herring", "Hess", "Hester", "Hewitt",
        "Hickman", "Hicks", "Higgins", "Hill", "Hines", "Hinton", "Hobbs", "Hodge", "Hodges", "Hoffman",
        "Hogan", "Holcomb", "Holden", "Holder", "Holland", "Holloway", "Holman", "Holmes", "Holt", "Hood",
        "Hooper", "Hoover", "Hopkins", "Hopper", "Horn", "Horne", "Horton", "House", "Houston", "Howard",
        "Howe", "Howell", "Hubbard", "Huber", "Hudson", "Huff", "Huffman", "Hughes", "Hull", "Humphrey",
        "Hunt", "Hunter", "Hurley", "Hurst", "Hutchinson", "Hyde", "Ingram", "Irwin", "Jackson", "Jacobs",
        "Jacobson", "James", "Jarvis", "Jefferson", "Jenkins", "Jennings", "Jensen", "Jimenez", "Johns", "Johnson",
        "Johnston", "Jones", "Jordan", "Joseph", "Joyce", "Joyner", "Juarez", "Justice", "Kane", "Kaufman",
        "Keith", "Keller", "Kelley", "Kelly", "Kemp", "Kennedy", "Kent", "Kerr", "Key", "Kidd",
        "Kim", "King", "Kinney", "Kirby", "Kirk", "Kirkland", "Klein", "Kline", "Knapp", "Knight",
        "Knowles", "Knox", "Koch", "Kramer", "Lamb", "Lambert", "Lancaster", "Landry", "Lane", "Lang",
        "Langley", "Lara", "Larsen", "Larson", "Lawrence", "Lawson", "Le", "Leach", "Leblanc", "Lee",
        "Leon", "Leonard", "Lester", "Levine", "Levy", "Lewis", "Lindsay", "Lindsey", "Little", "Livingston",
        "Lloyd", "Logan", "Long", "Lopez", "Lott", "Love", "Lowe", "Lowery", "Lucas", "Luna",
        "Lynch", "Lynn", "Lyons", "Macdonald", "Macias", "Mack", "Madden", "Maddox", "Maldonado", "Malone",
        "Mann", "Manning", "Marks", "Marquez", "Marsh", "Marshall", "Martin", "Martinez", "Mason", "Massey",
        "Mathews", "Mathis", "Matthews", "Maxwell", "May", "Mayer", "Maynard", "Mayo", "Mays", "Mcbride",
        "Mccall", "Mccarthy", "Mccarty", "Mcclain", "Mcclure", "Mcconnell", "Mccormick", "Mccoy", "Mccray", "Mccullough",
        "Mcdaniel", "Mcdonald", "Mcdowell", "Mcfadden", "Mcfarland", "Mcgee", "Mcgowan", "Mcguire", "Mcintosh", "Mcintyre",
        "Mckay", "Mckee", "Mckenzie", "Mckinney", "Mcknight", "Mclaughlin", "Mclean", "Mcleod", "Mcmahon", "Mcmillan",
        "Mcneil", "Mcpherson", "Meadows", "Medina", "Mejia", "Melendez", "Melton", "Mendez", "Mendoza", "Mercado",
        "Mercer", "Merrill", "Merritt", "Meyer", "Meyers", "Michael", "Middleton", "Miles", "Miller", "Mills",
        "Miranda", "Mitchell", "Molina", "Monroe", "Montgomery", "Montoya", "Moody", "Moon", "Mooney", "Moore",
        "Morales", "Moran", "Moreno", "Morgan", "Morin", "Morris", "Morrison", "Morrow", "Morse", "Morton",
        "Moses", "Mosley", "Moss", "Mueller", "Mullen", "Mullins", "Munoz", "Murphy", "Murray", "Myers",
        "Nash", "Navarro", "Neal", "Nelson", "Newman", "Newton", "Nguyen", "Nichols", "Nicholson", "Nielsen",
        "Nieves", "Nixon", "Noble", "Noel", "Nolan", "Norman", "Norris", "Norton", "Nunez", "Obrien",
        "Ochoa", "Oconnor", "Odom", "Odonnell", "Oliver", "Olsen", "Olson", "Oneal", "Oneil", "Oneill",
        "Orr", "Ortega", "Ortiz", "Osborn", "Osborne", "Owen", "Owens", "Pace", "Pacheco", "Padilla",
        "Page", "Palmer", "Park", "Parker", "Parks", "Parrish", "Parsons", "Pate", "Patel", "Patrick",
        "Patterson", "Patton", "Paul", "Payne", "Pearson", "Peck", "Pena", "Pennington", "Perez", "Perkins",
        "Perry", "Peters", "Petersen", "Peterson", "Petty", "Phelps", "Phillips", "Pickett", "Pierce", "Pittman",
        "Pitts", "Pollard", "Poole", "Pope", "Porter", "Potter", "Potts", "Powell", "Powers", "Pratt",
        "Preston", "Price", "Prince", "Pruitt", "Puckett", "Pugh", "Quinn", "Ramirez", "Ramos", "Ramsey",
        "Randall", "Randolph", "Rasmussen", "Ratliff", "Ray", "Raymond", "Reed", "Reese", "Reeves", "Reid",
        "Reilly", "Reyes", "Reynolds", "Rhodes", "Rice", "Rich", "Richard", "Richards", "Richardson", "Richmond",
        "Riddle", "Riggs", "Riley", "Rios", "Rivas", "Rivera", "Rivers", "Roach", "Robbins", "Roberson",
        "Roberts", "Robertson", "Robinson", "Robles", "Rocha", "Rodgers", "Rodriguez", "Rodriquez", "Rogers", "Rojas",
        "Rollins", "Roman", "Romero", "Rosa", "Rosales", "Rosario", "Rose", "Ross", "Roth", "Rowe",
        "Rowland", "Roy", "Ruiz", "Rush", "Russell", "Russo", "Rutledge", "Ryan", "Salas", "Salazar",
        "Salinas", "Sampson", "Sanchez", "Sanders", "Sandoval", "Sanford", "Santana", "Santiago", "Santos", "Sargent",
        "Saunders", "Savage", "Sawyer", "Schmidt", "Schneider", "Schroeder", "Schultz", "Schwartz", "Scott", "Sears",
        "Sellers", "Serrano", "Sexton", "Shaffer", "Shannon", "Sharp", "Sharpe", "Shaw", "Shelton", "Shepard",
        "Shepherd", "Sheppard", "Sherman", "Shields", "Short", "Silva", "Simmons", "Simon", "Simpson", "Sims",
        "Singleton", "Skinner", "Slater", "Sloan", "Small", "Smith", "Snider", "Snow", "Snyder", "Solis",
        "Solomon", "Sosa", "Soto", "Sparks", "Spears", "Spence", "Spencer", "Stafford", "Stanley", "Stanton",
        "Stark", "Steele", "Stein", "Stephens", "Stephenson", "Stevens", "Stevenson", "Stewart", "Stokes", "Stone",
        "Stout", "Strickland", "Strong", "Stuart", "Suarez", "Sullivan", "Summers", "Sutton", "Swanson", "Sweeney",
        "Sweet", "Sykes", "Talley", "Tanner", "Tate", "Taylor", "Terrell", "Terry", "Thomas", "Thompson",
        "Thornton", "Tillman", "Todd", "Torres", "Townsend", "Tran", "Travis", "Trevino", "Trujillo", "Tucker",
        "Turner", "Tyler", "Tyson", "Underwood", "Valdez", "Valencia", "Valentine", "Valenzuela", "Vance", "Vang",
        "Vargas", "Vasquez", "Vaughan", "Vaughn", "Vazquez", "Vega", "Velasquez", "Velazquez", "Velez", "Villarreal",
        "Vincent", "Vinson", "Wade", "Wagner", "Walker", "Wall", "Wallace", "Waller", "Walls", "Walsh",
        "Walter", "Walters", "Walton", "Ward", "Ware", "Warner", "Warren", "Washington", "Waters", "Watkins",
        "Watson", "Watts", "Weaver", "Webb", "Weber", "Webster", "Weeks", "Weiss", "Welch", "Wells",
        "West", "Wheeler", "Whitaker", "White", "Whitehead", "Whitney", "Wiggins", "Wilcox", "Wilder", "Wiley",
        "Wilkerson", "Wilkins", "Wilkinson", "William", "Williams", "Williamson", "Willis", "Wilson", "Winters", "Wise",
        "Witt", "Wolf", "Wolfe", "Wong", "Wood", "Woodard", "Woods", "Woodward", "Wooten", "Workman",
        "Wright", "Wyatt", "Wynn", "Yang", "Yates", "York", "Young", "Zamora", "Zimmerman", "Zuniga"
    )
    $lastName = $lastNames | Get-Random
    return $firstName, $lastName
}

Write-Host "Creating $numberOfUsers dummy users in your Microsoft 365 tenant..."

# Loop to create users
$createdUsers = @()
for ($i = 1; $i -le $numberOfUsers; $i++) {
    $percentComplete = [math]::Round(($i / $numberOfUsers) * 100)
    Write-Progress -Activity "Creating Users" -Status "Processing user $i of $numberOfUsers" -PercentComplete $percentComplete

    $nameParts = Get-RandomName
    $UserName = "$($nameParts[0]).$($nameParts[1])"
    $DisplayName = "$($nameParts[0]) $($nameParts[1])"
    $Password = Get-RandomPassword

    try {
        $createUser = New-DummyUser -UserName $UserName -DisplayName $DisplayName -Password $Password
        Write-Host "✅ $DisplayName created successfully."
        $createdUsers += [PSCustomObject]@{
            UserId      = $createUser.Id
            DisplayName = $createUser.DisplayName
            UserName    = $createUser.UserPrincipalName
        }
    }
    catch {
        if ($_.Exception.Message -match "Another object with the same value for property userPrincipalName already exists") {
            Write-host "❌ Error creating user $($DisplayName): UserPrincipalName already exists."
        }
        else {
            Write-Host "❌ Error creating user $($DisplayName): $($_.Exception.Message)"
        }
    }  
}

# Disconnect from Microsoft Graph
Start-Sleep -Seconds 1
Write-Host "`nDisconnecting from Microsoft Graph..."
Disconnect-MgGraph | Out-Null

Write-Host "✅ Done, total of $($createdUsers.Count) users created."

Write-Host "`nPress any key to exit..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")