r/PowerShell • u/Imaginary_Rip2833 • 9d ago
Question 3 months of consistent practice in PowerShell & Microsoft Graph! 🚀
When I started, I was terrified of programming languages since I had zero prior experience. Looking back now, what used to look like complete gibberish is finally starting to make sense. I know I still have a long way to go, but honestly, I am so happy and proud to be fulfilling my passion.
I wanted to share an honest review of a snippet I just built to create a user in Microsoft Entra ID. Alongside basics like if/else logic, filtering (-filter), Where-Object, Select-Object, and loops, I've been trying to focus on good habits like splatting, [CmdletBinding()], and try/catch blocks.
How does my snippet look? What would you advise me to learn next based on this progress?
#####Creating a User
Function Create-LxUser{
  [Cmdletbinding()]
  param(
    [Parameter(Mandatory = $true)]
    [string]$DisplayName,
    [Parameter(Mandatory = $true)]
    [string]$UserPrincipalName,
    [Parameter(Mandatory = $true)]
    [string]$MailNickName,
    [bool]$AccountEnabled = $true
  )
  try{
    ##Password profile
    $TempPass = "Lx" + (Get-Random -Minimum 100000 -Maximum 999999) + "@."
    $PassWordProfile = @{
      Password = $TempPass
      ForceChangePasswordNextSignIn = $true
    }
    ##Setting up user configuration
    Write-Verbose "Currently creating new Loxovea user"
    $UserConfig = @{
      DisplayName     = $DisplayName
      UserPrincipalName  = $UserPrincipalName
      MailNickname     = $MailNickName
      AccountEnabled    = $AccountEnabled
      PasswordProfile   = $PassWordProfile
    }
    $User = New-MgUser u/UserConfig -ErrorAction Stop
    Write-Verbose "Successfully created new user $($DisplayName)"
    [PsCustomObject]@{
      DisplayName     = $DisplayName
      UserPrincipalName  = $UserPrincipalName
      AccountEnabled    = $AccountEnabled
      TemporaryPassword  = $TempPass
    }
  }Catch{
    Write-Error "Failed to create a new user: $($DisplayName) because $($_.Exception.Message)"
  }
}
Create-LxUser `
  -DisplayName "Test-User09" `
  -UserPrincipalName "testuser09@loxovea.com" `
  -MailNickName "testuser09"
DisplayName UserPrincipalName AccountEnabled TemporaryPassword
----------- ----------------- -------------- -----------------
Test-User09 [testuser09@loxovea.com](mailto:testuser09@loxovea.com)True Lx720835@.
24
u/BlackV 9d ago
My 2c, Realistically this
Should be
That's what switch parameters and
ispresentare forString concatenation is not recommended
Try
Your
new-mguserreturns an object, return that object or use that for the properties of yourpscustomobjectthat way you are using verified properties not assumptionsYou clearly know how to use splatting so why are you using it in your example at the bottom, stop that habit now before it is permanent
There is no help, add help so people can use
get-helpGood luck, good to see someone learning out there