Back to script library
Entra / Microsoft 365 ยท Teams

Report teams emojis

A quick and simple script to report the usage of emojis as reactions to Teams chat and channel conversation messages.

Connect & set up

Run these once per session. All scopes are read-only unless the script makes changes.

Connect-MgGraph -Scopes "User.ReadBasic.All"

Run it

The main script. Copy it, or download the .ps1 and run it from your console.

param(
[int] $LookbackDays = 360,
[string] $StartDate = (Get-Date).AddDays(-$LookbackDays),
[string] $EndDate = (Get-Date).AddDays(1)
)
Connect-MgGraph -Scopes "User.ReadBasic.All"
$UserInfoAvailable = $false
# Fetching user information
[array]$Users = Get-MgUser -All -PageSize 999 -Property DisplayName, UserPrincipalName
If ($Users) {
Write-Output ("Fetched {0} users from the tenant." -f $Users.Count)
$UserHash = @{}
ForEach ($User in $Users) {
$UserHash.Add($User.UserPrincipalName, $User.DisplayName)
}
$UserInfoAvailable = $true
} Else {
Write-Output "No users found in the tenant."
Break
}
# Check if Exchange Online is already connected - otherwise connect
If ($Null -eq (Get-ConnectionInformation)) {
Write-Host "Connecting to Exchange Online..."
Connect-ExchangeOnline -ShowBanner:$false
}
# Build hash table to resolve reaction name to the emoji shown in Teams
$Emojis = @{}
$Emojis.Add("head shaking vertically", "๐Ÿคฆโ€โ™‚๏ธ")
$Emojis.Add("head shaking horizontally", "๐Ÿคฆโ€โ™€๏ธ")
$Emojis.Add("thumbs up", "๐Ÿ‘")
$Emojis.Add("thumbs down", "๐Ÿ‘Ž")
$Emojis.Add("like", "๐Ÿ‘")
$Emojis.Add("heart", "โค๏ธ")
$Emojis.Add("laugh", "๐Ÿ˜‚")
$Emojis.Add("peekingeye", "๐Ÿ™ˆ")
$Emojis.Add("surprised", "๐Ÿ˜ฎ")
$Emojis.Add("sad", "๐Ÿ˜ข")
$Emojis.Add("saddog", "๐Ÿถ")
$Emojis.Add("angry", "๐Ÿ˜ ")
$Emojis.Add("yes-tone1", "๐Ÿ‘๐Ÿป")
$Emojis.Add("blankface", "๐Ÿ˜")
$Emojis.Add("bowing", "๐Ÿ™‡")
$Emojis.Add("call", "๐Ÿ“ž")
$Emojis.Add("cool", "๐Ÿ˜Ž")
$Emojis.Add("cry", "๐Ÿ˜ข")
$Emojis.Add("coolkoala", "๐Ÿฆ˜")
$Emojis.Add("eyeinspeechbubble", "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ")
$Emojis.Add("fire", "๐Ÿ”ฅ")
$Emojis.Add("fistbump", "๐Ÿ‘Š")
$Emojis.Add("follow", "๐Ÿ‘ฃ")
$Emojis.Add("grinningfacewithsmilingeyes", "๐Ÿ˜")
$Emojis.Add("handsinair", "๐Ÿ™Œ")
$Emojis.Add("heartblue", "๐Ÿ’™")
$Emojis.Add("hearteyes", "๐Ÿ˜")
$Emojis.Add("happyface", "๐Ÿ˜Š")
$Emojis.Add("loudlycrying", "๐Ÿ˜ญ")
$Emojis.Add("personmotorwheelchairright2tone1", "๐Ÿง‘๐Ÿปโ€๐Ÿฆผ")
$Emojis.Add("rainbowsmileyface", "๐ŸŒˆ")
$Emojis.Add("clap", "๐Ÿ‘")
$Emojis.Add("smilingfacewithtear", "๐Ÿฅฒ")
$Emojis.Add("squintingfacewithtongue", "๐Ÿ˜œ")
$Emojis.Add("2714_heavycheckmark", "โœ”๏ธ")
$Emojis.Add("mickeymouse;0-neu-d1-63cc7d1c9164d9a1b23ae85714dd20fa", "๐Ÿญ")
$Emojis.Add("think", "๐Ÿค”")
$Emojis.Add("1f51c_soon", "๐Ÿ”œ")
$Emojis.Add("1f6a2_ship", "๐Ÿšข")
$Emojis.Add("1f4ce_paperclip", "๐Ÿ“Ž")
$Emojis.Add("relieved", "๐Ÿ˜Œ")
$Emojis.Add("rofl", "๐Ÿคฃ")
$Emojis.Add("peekingeyes", "๐Ÿ™ˆ")
$Emojis.Add("1f3a8_artistpalette", "๐ŸŽจ")
$Emojis.Add("1f458_kimono", "๐Ÿ‘˜")
$Emojis.Add("1f4a4_zzz", "๐Ÿ’ค")
$Emojis.Add("1f4af_hundredpointssymbol", "๐Ÿ’ฏ")
$Emojis.Add("1f603_grinningfacewithbigeyes", "๐Ÿ˜ƒ")
$Emojis.Add("1f920_facewithcowboyhat", "๐Ÿค ")
$Emojis.Add("1f627_anguishedface", "๐Ÿ˜ง")
$Emojis.Add("1f911_moneymouthface", "๐Ÿค‘")
$Emojis.Add("1f915_facewithheadbandage", "๐Ÿค•")
$Emojis.Add("1f4a1_electriclightbulb", "๐Ÿ’ก")
$Emojis.Add("1f917_huggingface", "๐Ÿค—")
$Emojis.Add("1f97a_pleadingface", "๐Ÿฅบ")
$Emojis.Add("1f92a_zanyface", "๐Ÿคช")
$Emojis.Add("1f9b7_tooth", "๐Ÿฆท")
$Emojis.Add("203c_doubleexclamationmark", "โ€ผ๏ธ")
$Emojis.Add("1f440_eyes", "๐Ÿ‘€")
$Emojis.Add("2795_heavyplussign", "โž•")
$Emojis.Add("2796_heavyminussign", "โž–")
$Emojis.Add("1f389_partypopper", "๐ŸŽ‰")
$Emojis.Add("screamingfear", "๐Ÿ˜ฑ")
$Emojis.Add("womanraisinghand", "๐Ÿ™‹โ€โ™€๏ธ ")
$Emojis.Add("support", "๐Ÿ†˜")
$Emojis.Add("callme", "๐Ÿง˜โ€โ™‚๏ธ")
$Emojis.Add("Vampire-tone3", "๐Ÿง›๐Ÿฝโ€โ™‚๏ธ")
$Emojis.Add("sweatgrinning", "๐Ÿ˜…")
$Emojis.Add("ttm", "๐Ÿˆถ")
$Emojis.Add("oreoyum", "๐Ÿช")
$Emojis.Add("victory", "โœŒ๏ธ")
$Emojis.Add("vulcansalute", "๐Ÿ––")
$Emojis.Add("rainbowsmile", "๐ŸŒˆ")
$Emojis.Add("smile", "๐Ÿ˜„")
$Emojis.Add("womandeveloper", "๐Ÿ‘ฉโ€๐Ÿ’ป")
$Emojis.Add("whew", "๐Ÿ˜ฎโ€๐Ÿ’จ")
# Find audit records for Teams emoji reactions
Write-Output "Looking for audit records..."
[array]$Records = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -Operations ReactedToMessage -Formatted -SessionCommand ReturnLargeSet -ResultSize 5000
If ($Records.Count -eq 0) {
Write-Output "No Teams emoji reaction records found"
Break
} Else {
$Records = $Records | Sort-Object Identity -Unique
Write-Output ("Found {0} Teams emoji reaction records to process..." -f $Records.Count)
$Report = [System.Collections.Generic.List[Object]]::new()
}
# Genreate the report
ForEach ($Rec in $Records) {
$AuditData = $Rec.AuditData | ConvertFrom-Json
Try {
$Emoji = $Emojis[$AuditData.MessageReactionType]
} Catch {
$Emoji = $null
}
If ($Null -eq $Emoji) {
$Emoji = $AuditData.MessageReactionType
}
# Is the message from a chat or a channel conversation?
$Channel = $AuditData.ChannelName
$Team = $AuditData.TeamName
If ($Null -eq $Channel) {
$Channel = "Chat"
$Team = $null
}
$Reaction = $AuditData.MessageReactionType
If ($null -eq $Reaction) {
$Reaction = $AuditData.OldValue + " (Removed)"
}
# Get user displayname if user info is available
If ($UserInfoAvailable) {
$UserDisplayName = $UserHash[$Rec.UserIds]
If ($Null -eq $UserDisplayName) {
$UserDisplayName = $Rec.UserIds
}
} Else {
$UserDisplayName = $Rec.UserIds
}
$ReportLine = [PSCustomObject][Ordered]@{
User = $UserDisplayName
Reaction = $Reaction
Emoji = $Emoji
ReactionTime = $Rec.CreationDate
Channel = $Channel
Team = $Team
ParentMessageId = $AuditData.ParentMessageId
UserId = $Rec.UserIds
}
$Report.Add($ReportLine)
}
$Report = $Report | Sort-Object {$_.ReactionTime -as [datetime]}
$Report | Out-GridView -Title "Teams Emoji Reactions Report"
Write-Output ""
Write-Output "Top Ten Emoji reactions used in Teams"
$Report | Group-Object Reaction -NoElement | Sort-Object Count -Descending | Select-Object -First 10 | Format-Table Name, @{name="Emoji"; Expression = { $Emojis[$_.Name] }}, Count -AutoSize
Write-Output ""
Write-Output "Top Ten Users who reacted with Emojis in Teams"
$Report | Group-Object User -NoElement | Sort-Object Count -Descending | Select-Object -First 10 | Format-Table Name, Count
Write-Output ""
# Export the report as an Excel worksheet or CSV file
If (Get-Module ImportExcel -ListAvailable) {
$ExcelGenerated = $true
Import-Module ImportExcel -ErrorAction SilentlyContinue
$ExcelOutputFile = ((New-Object -ComObject Shell.Application).Namespace('shell:Downloads').Self.Path) + "\TeamsEmojiReport.xlsx"
If (Test-Path $ExcelOutputFile) {
Remove-Item $ExcelOutputFile -ErrorAction SilentlyContinue
}
$Report | Export-Excel -Path $ExcelOutputFile -WorksheetName "Teams Emoji Reactions" -Title ("Teams Emoji Reactions Report {0}" -f (Get-Date -format 'dd-MMM-yyyy')) -TitleBold -TableName "TeamsEmojiReactions"
} Else {
$CSVOutputFile = ((New-Object -ComObject Shell.Application).Namespace('shell:Downloads').Self.Path) + "\TeamsEmojisReport.CSV"
$Report | Export-Csv -Path $CSVOutputFile -NoTypeInformation -Encoding Utf8
}
If ($ExcelGenerated) {
Write-Output ("Excel worksheet output written to {0}" -f $ExcelOutputFile)
} Else {
Write-Output ("CSV output file written to {0}" -f $CSVOutputFile)
}
Write-Output "All done - enjoy the emoji data!"

Parameters

ParameterDefaultNotes
-LookbackDays360Number of days back to include Teams message emoji reactions.
-StartDate(Get-Date).AddDays(-360)Start of the reporting window.
-EndDate(Get-Date).AddDays(1)End of the reporting window.
Attribution