BulkCreateM365Users.ps1


<#PSScriptInfo
 
.VERSION 1.2
 
.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
    The BulkCreateM365Users script is designed to automate the creation of multiple dummy users in a Microsoft 365 tenant. This can be particularly useful for testing, training, or demonstration purposes. The script leverages the Microsoft.Graph.Users module to interact with the Microsoft Graph API.
 
    Key features of the script include:
    - Generation of random first and last names for each user to ensure uniqueness.
    - Assignment of a randomly generated password for each user.
    - Customizable parameters to specify the number of users to be created and other user attributes.
    - Logging capabilities to track the progress and outcome of the script execution.
 
    The script requires appropriate permissions to create users in the Microsoft 365 tenant and interact with the Microsoft Graph API. The Microsoft.Graph.Users module will be installed automatically if it is not already present on the system.
 
.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
    Version : 1.2
    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.2
    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."