Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124


This quick reference guide is designed for Microsoft Teams administrators who are new to Microsoft Graph PowerShell. Each section contains simple, practical commands that you can use immediately to manage Teams, channels, members, and settings.
Before start the article we need to add the following permissions to our Registred Entra Id Application (Check how to create the App in Part 4 of the series) :
Team.ReadBasic.All,TeamSettings.ReadWrite.All,Channel.ReadBasic.All,ChannelSettings.ReadWrite.All,Group.ReadWrite.All
Every time you add and grant new permissions, you need to disconnect using command (Disconnect-Graph) and connect again using the following connection script (Registred Entra Id Application must be already created, Check how to create the App in Part 4 of the series).
Here’s Permission added and granted.

We also need to connect with this script :
# -------------------------------------------------- Change this variables -----------------------------------------
# Connect using app credentials
$TenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ClientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# -------------------------------------------------- Noting to change here -----------------------------------------
$Scope = "https://graph.microsoft.com/.default"
$AuthUrl =
"https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token"
$Body = @{
client_id = $ClientId
scope = $Scope
client_secret = $ClientSecret
grant_type = "client_credentials"
}
$Connection = Invoke-RestMethod -Method POST -Uri $AuthUrl -Body $Body -ContentType "application/x-www-form-urlencoded"
$AccessToken = $Connection.access_token
# Convert token to SecureString
$SecureToken = ConvertTo-SecureString -String $AccessToken -AsPlainText -Force
# Use the token for authentication
Connect-MgGraph -AccessToken $SecureToken
Permissions :
Team.ReadBasic.All,Group.Read.All
# Get all teams in your tenant
Get-MgGroup -Filter "resourceProvisioningOptions/Any(x:x eq 'Team')" | Select-Object DisplayName, Id, Description

Permissions :
Team.ReadBasic.All
$TeamName = "IT-Team"
# Search for a team by name
Get-MgGroup -Filter "displayName eq '$TeamName'"

Permissions :
Team.ReadBasic.All
Let’s get IT-Team details :
# Team Name
$TeamName = "IT-Team"
# Get Team ID
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get detailed Team information
Get-MgTeam -TeamId $TeamId | Select-Object DisplayName, Description, Visibility, CreatedDateTime, WebUrl

Permissions :
TeamSettings.Read.All
Let’s get IT-Team settings :
# Team Name
$TeamName = "IT-Team"
# Get Team ID
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# View team settings (messaging, fun settings, etc.)
Get-MgTeam -TeamId $TeamId | Select-Object DisplayName, FunSettings, GuestSettings, MemberSettings, MessagingSettings

Permissions :
TeamSettings.ReadWrite.All
In this example we’ll updtate Team Name of IT-Team to “Updated_IT-Team“.
# Team Name
$TeamName = "IT-Team"
# Get Team ID
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Update team display name and description
Update-MgTeam -TeamId $TeamId -DisplayName "Updated_IT-Team" -Description "New description for Updated_IT-Team"

Result in Teams admin center :

Permissions :
Group.ReadWrite.All
In this example, we’ll delete Marketing Team :
# Team Name
$TeamName = "Marketing-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Delete a team (moves to deleted items)
Remove-MgGroup -GroupId $TeamId

As you can see here, Marketing-Team is deleted :

Permissions :
Channel.ReadBasic.All
Let’s get channels of “Updated_IT-Team” :
# Team Name
$TeamName = "Updated_IT-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get all channels
Get-MgTeamChannel -TeamId $TeamId | Select-Object DisplayName, Description, MembershipType

Permissions :
Channel.ReadBasic.All
Let’s get the “System-Tickets” channel details from “Updated_IT-Team” :
# Team Name
$TeamName = "Updated_IT-Team"
$ChannelName = "System-Tickets"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get channel by name
$Channel = Get-MgTeamChannel -TeamId $TeamId | Where-Object {$_.DisplayName -eq $ChannelName}
$Channel | Select-Object Id, DisplayName, Description, WebUrl

Permissions :
Channel.Create,ChannelSettings.ReadWrite.AllIn the following code, you need to change $ChannelType variable to specify standard channel (value = standard ) private channel (value = private )
Let’s create new standard channel called “Project1 Updates” in “Updated_IT-Team“
# Team Name + Info
$TeamName = "Updated_IT-Team"
$NewChannelName = "Project Alpha Updates"
$ChannelDescription = "Channel for project Alpha status updates"
$ChannelType = "standard" # private for private channel & standard for standard channel
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Create a new standard channel
$ChannelParams = @{
DisplayName = $NewChannelName
Description = $ChannelDescription
MembershipType = $ChannelType
}
New-MgTeamChannel -TeamId $TeamId -BodyParameter $ChannelParams

Result in Teams Admin Center :

Permissions :
ChannelSettings.ReadWrite.All
Let’s update description of “Project Alpha Updates” Channel :
# Team Name + Info
$TeamName = "Updated_IT-Team"
$ChannelName = "Project Alpha Updates"
$NewDescription = "Updated description for Project Alpha Updates"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get Channel Id
$ChannelId = (Get-MgTeamChannel -TeamId $TeamId | where DisplayName -EQ $ChannelName).Id
# Update channel description
Update-MgTeamChannel -TeamId $TeamId -ChannelId $ChannelId -Description $NewDescription


You can also update Display Name for example :
# Team Name + Info
$TeamName = "Updated_IT-Team"
$ChannelName = "Project Alpha Updates"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get Channel Id
$ChannelId = (Get-MgTeamChannel -TeamId $TeamId | where DisplayName -EQ $ChannelName).Id
# Update channel DisplayName
Update-MgTeamChannel -TeamId $TeamId -ChannelId $ChannelId -DisplayName "Project Alpha Updates 1"

Permissions :
Channel.Delete.All
Let’s delete “Project Alpha Updates 2” Channel :
# Team Name + Info
$TeamName = "Updated_IT-Team"
$ChannelName = "Project Alpha Updates 2"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get Channel Id
$ChannelId = (Get-MgTeamChannel -TeamId $TeamId | where DisplayName -EQ $ChannelName).Id
# Delete a channel (cannot delete General channel)
Remove-MgTeamChannel -TeamId $TeamId -ChannelId $ChannelId

“Project Alpha Updates 2” Channel is deleted :

Permissions :
TeamMember.Read.All
Let’s get “Finance-Team” members :
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get all members of a team
Get-MgTeamMember -TeamId $TeamId | Select-Object DisplayName, Roles, UserId

Permissions :
TeamMember.Read.All
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get all owners of a team
Get-MgTeamMember -TeamId $TeamId | where Roles -Contains "owner" | Select-Object DisplayName, Roles, UserId

Permissions :
TeamMember.Read.All
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get all members of a team
Get-MgTeamMember -TeamId $TeamId | where Roles -notContains "owner" | Select-Object DisplayName, Roles, UserId

Permissions :
TeamMember.ReadWrite.All
Let’s add user “aymen@globalitnow.com” to “Finance-Team” as Member
# Member username
$UserName = "aymen@globalitnow.com"
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Add user as member
$MemberParams = @{
"@odata.type" = "#microsoft.graph.aadUserConversationMember"
"user@odata.bind" = "https://graph.microsoft.com/v1.0/users('$UserName')"
Roles = @("member")
}
New-MgTeamMember -TeamId $TeamId -BodyParameter $MemberParams


Permissions :
TeamMember.ReadWrite.All
Let’s add user “e.Girard@globalitnow.com” to “Finance-Team” as Owner :
# Member username
$UserName = "e.Girard@globalitnow.com"
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Add user as owner
$OwnerParams = @{
"@odata.type" = "#microsoft.graph.aadUserConversationMember"
"user@odata.bind" = "https://graph.microsoft.com/v1.0/users('$UserName')"
Roles = @("owner")
}
New-MgTeamMember -TeamId $TeamId -BodyParameter $OwnerParams


Permissions :
TeamMember.ReadWrite.All
Let’s remove user “aymen@globalitnow.com” from “Finance-Team” Members :
# Member username
$UserName = "aymen@globalitnow.com"
# Team Name
$TeamName = "Finance-Team"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'").Id
# Get member Id
$UserDisplayName = (Get-MgUser -Filter "UserPrincipalName eq '$UserName'").DisplayName
$MemberId = (Get-MgTeamMember -TeamId $TeamId | Where-Object { $_.DisplayName -eq $UserDisplayName }).Id
# Remove a team member
Remove-MgTeamMember -TeamId $TeamId -ConversationMemberId $MemberId

Aymen is no member of “Finance-Team” :

Permissions :
ChannelMessage.Read.All
Let’s read the top 10 messages of General Channel of IT-Team :
# Team Name
$TeamName = "Updated_IT-Team"
$ChannelName = "General"
# Get Team Id
$TeamId = (Get-MgGroup -Filter "displayName eq '$TeamName'" ).Id
# Get channel by name
$ChannelId = (Get-MgTeamChannel -TeamId $TeamId | Where-Object {$_.DisplayName -eq $ChannelName}).Id
# Get recent messages from a channel
Get-MgTeamChannelMessage -TeamId $TeamId -ChannelId $ChannelId -Top 10 |
Select-Object @{Name="Body";Expression={$_.Body.Content}}, CreatedDateTime,
@{Name="From";Expression={$_.From.User.DisplayName}}


Thanks