Payton Flint's Tech Blog
Menu
  • Home
  • Blog
  • Categories
  • Resources
  • About
  • Contact
Menu

Generate Email List From CM Primary User Data

Posted on October 12, 2022June 4, 2023 by paytonflint

Let’s say you want to perform an ad-hoc test deployment. You build a small test collection and go to deploy, but wait – you ought to do your due diligence and notify the primary users of the targeted devices, right? You highlight primary user data in the console and attempt to copy it to a spreadsheet, but the resulting cells contain the domain name appended to the SAMAccountName – how convenient. /s

You could proceed to look up each user in Active Directory and build a spreadsheet, but that is tedious and cumbersome. Such toil ought to be eliminated when possible. And you’re in luck! I’ve already done the work. Specify your domain name in SAM format rather than UPN format (read more on that here: https://4sysops.com/archives/understand-the-upn-and-samaccountname-user-account-attributes/). Don’t worry about that pesky backslash, case-sensitivity, empty lines, or case-inconsistency in AD data– this script can handle all of these common deal-breakers. It will accept data copied straight from the Primary User column in the CM console and will output an easily-parsable .CSV containing names, usernames, and email addresses of the targeted individuals.

# Script written by Payton Flint
# See https://paytonflint.com/generate-email-list-from-cm-primary-user-data/

# Set domain name variable
$Domain = "<INSERT DOMAIN>"
 
# Set list file name
$FileName = "UserList.txt"
 
#Set output file name
$OutputFileName = "MailList.csv"
 
#===================================================================================================
 
# Append backslash character to domain name variable if not present
if ($Domain -NotLike "*\"){
    $Domain += "\"
}
 
# Derive lowercase domain variable
$LCDomain = "$Domain".ToLower()
 
# Derive uppercase domain variable
$UCDomain = "$Domain".ToUpper()
 
# Identify location of script
$ScriptPath = Split-Path ($MyInvocation.MyCommand.Path) -Parent
 
# Get content from list, ignore blank lines
$ListContent = Get-Content "$ScriptPath\$FileName" | Where-Object {$_.Trim() -ne "" }
 
# Remove domain from list items
$Usernames = $ListContent | ForEach-Object {
    $_.Replace("$LCDomain", "").Replace("$UCDomain", "")
}
 
# Run AD query on username list and write to array
$Output = ForEach ($Username in $Usernames) {   
    $User = Get-ADUser -filter "SamAccountName -eq '$Username'" -Properties DisplayName, EmailAddress
 
    # Create array
    [PSCustomObject]@{
        Name = $User.DisplayName
        Username = $User.SamAccountName
        EmailAddress = $User.EmailAddress
    }
}
 
# Write output to .CSV
$Output | Export-CSV -Path "$ScriptPath\$OutputFileName" -NoTypeInformation

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

About The Author

Author's Portrait

In my journey as a technologist and 11 years of experience as an IT professional, I have found my niche as Director of Infrastructure Services; developing my skillsets in management, scripting, cloud infrastructure, identity management, and networking.

I have experience as a Systems Administrator and Engineer for large enterprises including the DoD, government agencies, and a nuclear-generation site.

I've been blessed to collaborate with engineers at esteemed Fortune 50 corporations, and one of Africa's largest, to ensure successful implementation of my work.

GitHub Button

Credentials

M365 Endpoint Administrator Associate
M365 Fundamentals
Microsoft AZ-900
CompTIA CSIS
CompTIA CIOS
CompTIA Security+
CompTIA Network+
CompTIA A+
  • April 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
© 2022 Payton Flint | The views and opinions expressed on this website belong solely to the author/owner and do not represent the perspectives of any individuals, institutions, or organizations, whether affiliated personally or professionally, unless explicitly stated otherwise. The content and products on this website are provided as-is with no warranties or guaranties, are for informational/demonstrative purposes only, do not constitute professional advice, and are not to be used maliciously. The author/owner is not responsible for any consequences arising from actions taken based on information provided on this website, nor from the use/misuse of products from this site. All trademarks are the property of their respective owners.