Provisioning Microsoft Teams channels manually is fine for a handful of teams, but it quickly becomes unsustainable when onboarding projects at scale. Using the Microsoft Graph API through PowerShell, you can create teams, add channels, and assign members programmatically — turning a 15-minute task into a 15-second script.

Prerequisites

Connect to Microsoft Graph with the Team.Create, Channel.Create, and TeamMember.ReadWrite.All scopes.

Connect-MgGraph -Scopes "Team.Create","Channel.Create","TeamMember.ReadWrite.All","Group.ReadWrite.All"

Creating a New Team

Create the team from scratch using the standard template.

$team = New-MgTeam -DisplayName "Project Phoenix" `
    -Description "Cross-functional project team" `
    -Visibility "Private" `
    -AdditionalProperties @{
        "[email protected]" = "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"
    }
Write-Host "Team created: $($team.Id)"

Adding Standard Channels

Provision a consistent set of channels that every project team should have.

$channels = @("Architecture","Deployments","Incidents","Documentation")
foreach ($channel in $channels) {
    New-MgTeamChannel -TeamId $team.Id `
        -DisplayName $channel `
        -MembershipType "standard"
    Write-Host "Created channel: $channel"
}

Adding Members in Bulk

Import a list of UPNs from CSV and add each as either an owner or a member.

$members = Import-Csv "project-team.csv"  # columns: UPN, Role
foreach ($m in $members) {
    $user  = Get-MgUser -UserId $m.UPN
    $roles = if ($m.Role -eq "Owner") { @("owner") } else { @() }
    New-MgTeamMember -TeamId $team.Id `
        -AdditionalProperties @{
            "@odata.type"     = "#microsoft.graph.aadUserConversationMember"
            "[email protected]" = "https://graph.microsoft.com/v1.0/users('$($user.Id)')"
            roles             = $roles
        }
}

Summary

Automating Teams provisioning through the Graph API ensures every project team starts with the same structure, membership, and channel layout. Wrap this into a self-service request backed by a Power Automate flow and your end users get instant, consistent team provisioning without raising a support ticket.