Microsoft Teams Administration: Complete Practical Course — Matching the Teams Admin Center & MS-700 Certification
The guide covers all Teams Admin Center sections — Manage Teams & Channels, Guest & External Access, Meeting Policies & Audio Conferencing, Webinars & Town Halls, Teams Phone System, Auto Attendants & Call Queues, Messaging Policies, App Management, Analytics & Reports, and Notifications — including the latest 2025–2026 updates: Town Halls replacing Live Events, Copilot in Teams meeting policies, and the new shared channel architecture with Azure B2B Direct Connect.
🗺️ Course Module Map
Teams Admin Center Overview
Dashboard, navigation, service health, Teams usage cards, and key operational views
Teams — Manage Teams & Channels
Team types, Standard/Private/Shared channels, team lifecycle, templates, archive & delete
Teams Policies & Settings
Teams policies, update policies, Teams templates, org-wide settings, team discovery
Users — Guest & External Access
Guest access configuration, external access (federation), trusted organizations, B2B Direct Connect
Meetings — Policies & Audio Conferencing
Meeting policies, meeting settings, audio conferencing, conference bridges, dial-in numbers
Meetings — Webinars & Town Halls
Webinar policies, registration, town hall settings replacing Live Events, event management
Voice — Teams Phone System
Phone numbers, calling plans, Direct Routing, Operator Connect, voicemail, call routing policies
Voice — Auto Attendants & Call Queues
Auto attendants, call queues, resource accounts, holiday schedules, business hours routing
Messaging Policies
Chat settings, Giphy, memes, URL previews, read receipts, priority notifications, message deletion
Apps — Management & Policies
Manage apps, app permission policies, app setup policies, custom apps, Teams marketplace governance
Analytics, Reports & Notifications
Usage reports, PSTN reports, call quality dashboard, alert rules, monitoring
MS-700 Certification Alignment
Exam domains, skill weightings, scenario tips, and study resources
🏠 Module 1: Teams Admin Center Overview
The Teams Admin Center at admin.teams.microsoft.com is the single management plane for all Microsoft Teams configuration. It provides a real-time operational dashboard alongside deep policy management for meetings, voice, messaging, and apps across every user in the tenant.
Dashboard Cards & Navigation
| Dashboard Card | What It Shows | Go Deeper |
|---|---|---|
| Active Teams users | Count of users who sent a message, attended a meeting, or made a call in the last 30 days | Analytics & reports → Usage reports → Teams user activity |
| Teams & Channels | Total active teams and total channels across the tenant | Teams → Manage teams |
| Calling activity | PSTN call minutes (inbound and outbound) and call count in the last 7 days | Analytics & reports → PSTN usage reports |
| Meeting quality | Percentage of meetings rated Poor or Unknown for audio/video quality — Call Quality Dashboard link | Analytics & reports → Call quality dashboard |
| Service health | Active Teams service incidents and advisories from Microsoft 365 Service Health | Microsoft 365 Admin Center → Service health |
👥 Teams
👤 Users
📞 Meetings
🕽️ Voice
💬 Messaging
📍 Locations
📊 Analytics & reports
🛠️ Planning
📱 Apps
🔔 Notifications & alerts
👥 Module 2: Teams — Manage Teams & Channels
The Manage teams blade provides a complete inventory of every team in the tenant with inline editing, member management, and the ability to create, archive, and delete teams. Understanding team types and channel types is foundational for both daily administration and the MS-700 exam.
Teams Types
| Team Type | Visibility | Who Can Join | Use Case |
|---|---|---|---|
| Private | Hidden from Teams search | Owners add members only — users can request to join | Project teams, sensitive departmental workspaces, executive teams |
| Public | Visible in Teams search | Any user in the org can join without approval | Company-wide communities, interest groups, open collaboration spaces |
| Org-wide | Auto-includes all org users | All licensed users added automatically — max 10,000 members | Company announcements, all-staff communications (max 5 per tenant) |
Channel Types
| Channel Type | Membership | SharePoint Site | Key Characteristics |
|---|---|---|---|
| Standard | All team members | Shared with team site | Default channel type — visible and accessible to all team members; cannot be restricted |
| Private | Selected members only (subset of team) | Separate dedicated site collection | Restricted conversations within a team — ideal for sensitive sub-groups (e.g. managers within a dept team); max 30 per team |
| Shared | Members from multiple teams or external tenants (B2B Direct Connect) | Separate dedicated site collection | Cross-team and cross-tenant collaboration — external users from partner tenants without guest account; requires Azure B2B Direct Connect setup |
Inventory All Teams, Manage Members & Archive Inactive Teams
Export a full tenant teams inventory, manage team members and owners, create new teams with specific visibility settings, and archive teams that are no longer actively used.
Install-Module MicrosoftTeams -Force Connect-MicrosoftTeams # Export all teams in the tenant Get-Team | Select-Object DisplayName,Description,Visibility,MailNickName,Archived,GroupId | Export-Csv -Path "AllTeams.csv" -NoTypeInformation # Find all public teams (potential oversharing risk) Get-Team -Visibility Public | Select-Object DisplayName,Visibility,MailNickName | Format-Table -AutoSize # Find teams with no owners (governance gap) Get-Team | ForEach-Object { $Owners = Get-TeamMember -GroupId $_.GroupId | Where-Object {$_.Role -eq "Owner"} if ($Owners.Count -eq 0) { Write-Host "NO OWNER: $($_.DisplayName)" -ForegroundColor Red } } # Create a new Private team $NewTeam = New-Team -DisplayName "Project Phoenix" -Description "Project Phoenix workspace" -Visibility Private Write-Host "Team created: $($NewTeam.GroupId)" # Add a member and an owner Add-TeamMember -GroupId $NewTeam.GroupId -User "john.doe@contoso.com" Add-TeamMember -GroupId $NewTeam.GroupId -User "jane.smith@contoso.com" -Role Owner # Get all channels and create a Private channel Get-TeamChannel -GroupId $NewTeam.GroupId | Select-Object DisplayName,MembershipType | Format-Table -AutoSize New-TeamChannel -GroupId $NewTeam.GroupId -DisplayName "Leadership Only" -MembershipType Private # Archive an inactive team (makes it read-only, preserves content) Set-TeamArchivedState -GroupId "team-groupid-here" -Archived $true
⚙️ Module 3: Teams Policies & Settings
Teams policies control what features users can access within Teams itself — team creation permissions, team discovery, update channels, and org-wide settings. These are separate from meeting, messaging, and app policies, which each have their own dedicated blades.
Key Teams Policy Settings
| Policy Setting | What It Controls | Recommendation |
|---|---|---|
| Allow team creation | Whether non-admin users can create new teams from the Teams client | Restrict to IT staff or M365 Group owners via Entra ID Group creation policy — open team creation leads to team sprawl |
| Allow private channel creation | Whether team owners and members can create private channels within a team | Allow for owners, restrict for members in security-sensitive environments |
| Allow shared channel creation | Whether team owners can create shared channels (cross-team and cross-tenant) | Enable with caution — requires Azure B2B Direct Connect configuration |
| Teams update policy — update channel | Controls which update ring users receive Teams client updates from (General, Preview, Developer Preview) | Use Preview channel for IT pilot group, General for all users |
| Org-wide team — show in channels list | Whether Org-wide teams appear pinned in all users’ Teams client channel list | Enable for company announcement teams so all staff see updates |
Configure Teams Policies & Assign to Users
Create a custom Teams policy, set update channels for pilot groups, and use batch policy assignment to apply policies to groups of users efficiently.
Connect-MicrosoftTeams # Get all Teams channel policies Get-CsTeamsChannelsPolicy | Select-Object Identity,AllowPrivateChannelCreation,AllowSharedChannelCreation | Format-Table -AutoSize # Create a restricted Teams channels policy New-CsTeamsChannelsPolicy -Identity "RestrictedChannels" ` -AllowPrivateChannelCreation $false ` -AllowSharedChannelCreation $false # Assign the policy to a specific user Grant-CsTeamsChannelsPolicy -Identity "user@contoso.com" -PolicyName "RestrictedChannels" # Batch assign policy to multiple users at once New-CsBatchPolicyAssignmentOperation ` -PolicyType TeamsChannelsPolicy ` -PolicyName "RestrictedChannels" ` -Identity @("user1@contoso.com","user2@contoso.com","user3@contoso.com") ` -OperationName "Restrict channel creation for contractors" # Set Teams update channel for IT pilot group New-CsTeamsUpdateManagementPolicy -Identity "ITPilotRing" -UseNewTeamsClient MicrosoftChoice -AllowPreview $true Grant-CsTeamsUpdateManagementPolicy -Identity "itadmin@contoso.com" -PolicyName "ITPilotRing"
🔓 Module 4: Users — Guest & External Access
Teams provides two distinct mechanisms for external collaboration: Guest access (adding external individuals as guests in your tenant — they get a guest account in Entra ID) and External access (federated communication with users in other organisations — no guest account created). Understanding the difference is critical for the MS-700 exam.
Guest Access vs External Access
| Feature | Guest Access | External Access (Federation) |
|---|---|---|
| Account type | Guest account created in tenant Entra ID (B2B invite) | No account created — federated identity stays in their home tenant |
| Team membership | Yes — added to teams, has access to channels, files, meetings | No — can only chat 1:1 or group chat; cannot be added to teams |
| File access | Full access to SharePoint files shared in team channels | No file access — chat only |
| Meeting access | Full meeting participation — scheduled from within shared teams | Can be invited to meetings as an external attendee |
| Governance | Managed via Entra ID Guest Access Reviews; counted in licence usage for some features | Managed via Teams External Access policy — allow/block by domain |
| Shared channels | Not applicable — guest users use B2B invite | Used for Shared channels via Azure B2B Direct Connect (no guest account) |
Configure Guest Access & External Access Policies
Enable or restrict guest access for the tenant, configure guest calling and meeting capabilities, and set external access (federation) to allow or block specific domains.
Connect-MicrosoftTeams # Get current guest access configurations Get-CsTeamsGuestCallingConfiguration Get-CsTeamsGuestMeetingConfiguration Get-CsTeamsGuestMessagingConfiguration # Configure guest calling capabilities Set-CsTeamsGuestCallingConfiguration -AllowPrivateCalling $true # Configure guest meeting capabilities Set-CsTeamsGuestMeetingConfiguration ` -AllowIPVideo $true ` -AllowMeetNow $false ` -LiveCaptionsEnabledType Disabled # Configure guest messaging capabilities (disable Giphy and memes) Set-CsTeamsGuestMessagingConfiguration ` -AllowUserChat $true ` -AllowGiphy $false ` -AllowMemes $false # Enable open federation (communicate with all external tenants) Set-CsExternalAccessPolicy -Identity Global -EnableFederationAccess $true # Block a specific domain from federating with your tenant $BlockList = New-CsEdgeBlockList -BlockedDomain (New-CsEdgeDomainPattern -Domain "blocked-org.com") Set-CsTenantFederationConfiguration -BlockedDomains $BlockList
📞 Module 5: Meetings — Policies & Audio Conferencing
Meeting policies control the meeting features available to organisers and participants in Teams meetings. They are among the most frequently configured policies in Teams and are heavily tested in MS-700. Audio Conferencing adds PSTN dial-in capability to Teams meetings — users can join by calling a phone number without a Teams client.
Key Meeting Policy Settings
| Setting | Description | Exam Focus |
|---|---|---|
| Who can bypass the lobby | Controls who can enter the meeting directly vs who waits in the lobby for an organiser to admit them | High — know all values: Everyone, People in my org and guests, People in my org, Only organisers and co-organisers |
| Allow cloud recording | Whether meeting organisers can record Teams meetings (stored in OneDrive or SharePoint) | Medium — know that recording now goes to OneDrive (not Stream) by default |
| Allow transcription | Whether live captions and post-meeting transcription is available | Medium — required for Copilot in Teams meeting intelligence |
| Allow meeting chat | Whether the chat panel is available during meetings — can be set to Enabled, Disabled, or Read-only after meeting | Low — note the “Read-only” option for post-meeting access |
| Copilot in Teams meetings | Controls whether Microsoft 365 Copilot can provide meeting summaries, action items, and Q&A — requires transcription enabled | High — new in 2025–2026; requires M365 Copilot licence |
| Anonymous users can join | Whether users without an account (no sign-in) can join meetings — tenant-level and per-meeting-policy setting | High — security-critical; know that tenant setting overrides policy |
Create Meeting Policies & Configure Audio Conferencing
Build a secure meetings policy for general staff and a restricted policy for external-facing meetings, then configure audio conferencing bridge settings and dial-in PIN policies.
Connect-MicrosoftTeams # Get all meeting policies Get-CsTeamsMeetingPolicy | Select-Object Identity,AllowAnonymousUsersToJoinMeeting,AutoAdmittedUsers,AllowCloudRecording,AllowTranscription | Format-Table -AutoSize # Create a secure internal meeting policy New-CsTeamsMeetingPolicy -Identity "SecureInternalMeetings" ` -AllowAnonymousUsersToJoinMeeting $false ` -AutoAdmittedUsers "EveryoneInCompanyExcludingGuests" ` -AllowCloudRecording $true ` -AllowTranscription $true ` -AllowIPVideo $true ` -AllowScreenSharing "EntireScreen" # Create an external-facing meeting policy (lobby-first for all) New-CsTeamsMeetingPolicy -Identity "ExternalMeetings" ` -AllowAnonymousUsersToJoinMeeting $true ` -AutoAdmittedUsers "OrganizerOnly" ` -AllowCloudRecording $false ` -AllowTranscription $false # Assign meeting policy to a user Grant-CsTeamsMeetingPolicy -Identity "user@contoso.com" -PolicyName "SecureInternalMeetings" # Get audio conferencing bridge numbers Get-CsOnlineDialInConferencingServiceNumber | Select-Object Number,City,CountryOrRegion,IsDefault | Format-Table -AutoSize # Get all users with audio conferencing assigned Get-CsOnlineDialInConferencingUser -ResultSize Unlimited | Select-Object Identity,ConferenceId,TollNumber,TollFreeNumber | Format-Table -AutoSize
🎥 Module 6: Meetings — Webinars & Town Halls
Teams provides two dedicated large-audience event experiences: Webinars (interactive, registration-based events for up to 1,000 attendees with Q&A and registration management) and Town Halls (structured broadcast events for up to 20,000 attendees, replacing Live Events as of October 2024). Both are managed through dedicated policy blades in the Teams Admin Center.
Webinars vs Town Halls vs Meetings
| Feature | Regular Meeting | Webinar | Town Hall |
|---|---|---|---|
| Max attendees | 1,000 (view-only overflow to 10,000) | 1,000 (Teams Premium: 10,000) | 10,000 (Teams Premium: 20,000) |
| Registration | No | Yes — custom registration form, approval, waitlist | No — open join link or org-wide |
| Attendee interaction | Full — audio, video, screen share | Q&A, polls; attendee mic/camera controlled by organiser | Q&A only — attendees cannot unmute; producer controls all |
| Presenter separation | No formal role separation | Organiser, presenter, attendee roles | Organiser, presenter, co-organiser; attendees are view-only |
| Recording | OneDrive / SharePoint | OneDrive — shared with registrants | OneDrive — available after event ends |
| Licence required | Teams (included in M365) | Teams (basic webinar); Teams Premium for advanced registration features | Teams (up to 10,000); Teams Premium for 20,000 and eCDN |
| Live Events replacement | N/A | N/A | ✅ Town Halls replaced Live Events from October 2024 |
Configure Webinar & Town Hall Policies
Manage webinar and town hall event policies to control who can create events, registration settings, and attendee experience across the organisation.
Connect-MicrosoftTeams # Get current events policy Get-CsTeamsEventsPolicy | Select-Object Identity,AllowWebinars,AllowTownhalls,EventExpiryDays | Format-Table -AutoSize # Create a full events policy (webinars + town halls) New-CsTeamsEventsPolicy -Identity "FullEventsAccess" ` -AllowWebinars Enabled ` -AllowTownhalls Enabled ` -EventExpiryDays 90 # Create a restricted policy (webinars only) New-CsTeamsEventsPolicy -Identity "WebinarOnly" ` -AllowWebinars Enabled ` -AllowTownhalls Disabled # Grant policy to a group (batch group assignment) New-CsBatchGroupPolicyAssignmentOperation ` -PolicyType TeamsEventsPolicy ` -PolicyName "FullEventsAccess" ` -GroupIds @("group-id-here") ` -OperationName "Assign events policy to All Staff"
⚠️ Live Events Retirement — October 2024
Microsoft retired Teams Live Events in October 2024. All large-audience broadcasts should now use Town Halls. If you have existing Live Events configurations or policies in older tenants, these need to be migrated to Town Hall policies. The CsTeamsMeetingBroadcastPolicy cmdlets are deprecated — use CsTeamsEventsPolicy for all new configurations.
🕽️ Module 7: Voice — Teams Phone System
Teams Phone System enables PSTN calling directly within Teams — replacing traditional PBX systems. Phone numbers can be provisioned through Microsoft Calling Plans, Operator Connect (bring your existing carrier into Teams), or Direct Routing (connect your own SBC to Teams via SIP). All three are managed through the Voice blade in the Teams Admin Center.
Teams Phone Connectivity Options
| Option | How It Works | Infrastructure Needed | Best For |
|---|---|---|---|
| Microsoft Calling Plans | Microsoft provides PSTN connectivity directly — numbers purchased through Microsoft, minutes billed by Microsoft | None — fully cloud, no on-prem hardware | Organisations wanting a fully Microsoft-managed telephony solution with no SBC or carrier management |
| Operator Connect | Approved carrier connects their PSTN network to Teams via Microsoft-managed interconnect — numbers ported to or provided by the carrier | None on-prem — carrier manages SBC in their network | Organisations with existing carrier relationships wanting to keep their carrier but move to Teams calling |
| Direct Routing | Organisation deploys a certified Session Border Controller (SBC) that connects their PSTN trunk directly to the Teams Phone System via SIP TLS | Certified SBC (AudioCodes, Ribbon, Oracle, etc.) — on-prem or cloud-hosted | Complex environments: PBX migration, legacy trunk reuse, specific dial plans, regulatory numbering requirements |
| Teams Phone Mobile | Mobile carrier SIM integrates with Teams — native mobile number rings as Teams call; employee uses one number for mobile and Teams | None — SIM-based integration via approved carriers | Mobile-first frontline workers needing a single number for Teams and their mobile phone |
Assign Phone Numbers, Enable Enterprise Voice & Manage Calling Policies
Assign PSTN phone numbers to users, enable Teams Phone (Enterprise Voice), configure calling policies, and report on all phone-enabled users across the tenant.
Connect-MicrosoftTeams # Get all unassigned phone numbers in the tenant Get-CsPhoneNumberAssignment -CapabilitiesContain UserAssignment -PstnAssignmentStatus Unassigned | Select-Object TelephoneNumber,NumberType,CapabilitiesName | Format-Table -AutoSize # Assign a Calling Plan number to a user Set-CsPhoneNumberAssignment ` -Identity "user@contoso.com" ` -PhoneNumber "+14255551234" ` -PhoneNumberType CallingPlan # Enable the user for Enterprise Voice (Teams Phone) Set-CsPhoneNumberAssignment ` -Identity "user@contoso.com" ` -EnterpriseVoiceEnabled $true # Export all Teams Phone-enabled users Get-CsOnlineUser -Filter {EnterpriseVoiceEnabled -eq $true} | Select-Object DisplayName,SipAddress,LineUri,EnterpriseVoiceEnabled | Export-Csv -Path "TeamsPhoneUsers.csv" -NoTypeInformation # Create a restricted calling policy (block external forwarding) New-CsTeamsCallingPolicy -Identity "NoExternalForwarding" ` -AllowPrivateCalling $true ` -AllowCallForwardingToUser $true ` -AllowCallForwardingToPhone $false ` -AllowVoicemail AlwaysEnabled # Get voicemail policies Get-CsOnlineVoicemailPolicy | Select-Object Identity,EnableTranscription,MaximumRecordingLength | Format-Table -AutoSize
📞 Module 8: Voice — Auto Attendants & Call Queues
Auto attendants and call queues are the building blocks of an enterprise telephony experience in Teams Phone. Auto attendants provide the main menu experience (“Press 1 for Sales, Press 2 for Support”) and Call queues distribute incoming calls to a group of agents with hold music and overflow handling — both require Resource Accounts with phone numbers assigned.
Auto Attendant vs Call Queue
| Feature | Auto Attendant | Call Queue |
|---|---|---|
| Purpose | Route callers to correct destination via menu prompts | Queue callers to be answered by the next available agent |
| Interaction | DTMF (key presses) or speech recognition for menu navigation | No caller interaction — callers wait on hold until agent available |
| Business hours | Separate routing for business hours vs after hours vs holidays | Overflow and timeout routing for queued calls that wait too long |
| Hold experience | Custom greeting + routing — no hold music | Hold music (custom or default), position announcement, estimated wait time |
| Resource account | Required — one resource account per auto attendant | Required — one resource account per call queue |
| Agents | N/A — routes to users, call queues, or voicemail | Teams users or M365 Groups; routing: serial, round robin, longest idle, attendant |
Create Resource Accounts, Auto Attendants & Call Queues
Provision resource accounts, build a call queue for a support team, and assign a phone number to the queue so external callers can reach agents directly.
Connect-MicrosoftTeams # Step 1: Create a Resource Account for the Call Queue New-CsOnlineApplicationInstance ` -UserPrincipalName "cq-itsupport@contoso.com" ` -DisplayName "IT Support Queue" ` -ApplicationId "11cd3e2e-fccb-42ad-ad00-878b93575e07" # Call Queue App ID Sync-CsOnlineApplicationInstance -ObjectId (Get-CsOnlineApplicationInstance -Identity "cq-itsupport@contoso.com").ObjectId # Step 2: Assign a phone number to the resource account Set-CsPhoneNumberAssignment ` -Identity "cq-itsupport@contoso.com" ` -PhoneNumber "+14255559876" ` -PhoneNumberType CallingPlan # Step 3: Create the Call Queue with round-robin routing $Agents = @( (Get-CsOnlineUser -Identity "agent1@contoso.com").Identity, (Get-CsOnlineUser -Identity "agent2@contoso.com").Identity ) New-CsCallQueue ` -Name "IT Support Queue" ` -UseDefaultMusicOnHold $true ` -DistributionMethod RoundRobin ` -AgentAlertTime 30 ` -OverflowThreshold 50 ` -TimeoutThreshold 600 ` -Users $Agents # Get all call queues and auto attendants Get-CsCallQueue | Select-Object Name,DistributionMethod,AgentAlertTime,OverflowThreshold | Format-Table -AutoSize Get-CsAutoAttendant | Select-Object Name,LanguageId,TimeZoneId | Format-Table -AutoSize Get-CsOnlineApplicationInstance | Select-Object DisplayName,UserPrincipalName,PhoneNumber | Format-Table -AutoSize
💬 Module 9: Messaging Policies
Messaging policies control the chat and channel messaging experience for Teams users. They determine whether users can edit or delete sent messages, use Giphy or stickers, send priority notifications, and use URL previews. Messaging policies are per-user and can be assigned to individuals or groups.
Key Messaging Policy Settings
| Setting | Description | Recommended |
|---|---|---|
| Allow user edit messages | Whether users can edit messages after sending | Enable — reduces follow-up correction messages |
| Allow user delete messages | Whether users can delete their own sent messages | Enable with caution — deleted messages are not recoverable by admins in standard config |
| Allow owners to delete all messages | Whether team owners can delete any message in their channels | Evaluate — useful for moderating public teams; not appropriate for all scenarios |
| Allow Giphy in messages | Whether the Giphy GIF picker is available in chat compose box | Restrict or set to Strict rating in regulated industries (financial, healthcare, legal) |
| Allow priority notifications | Whether users can send “Urgent” messages that notify the recipient every 2 minutes for 20 minutes | Enable for operational staff; consider restricting for executive users |
| Read receipts | Whether sent messages show read status to the sender | User controlled (default) — allow users to manage their own privacy preference |
| Allow URL previews | Whether URLs in messages auto-expand to show a rich link preview card | Enable — improves communication context; can be disabled for data privacy concerns |
Create & Assign Custom Messaging Policies
Create a compliant messaging policy for regulated industry users (no Giphy, no stickers, restricted deletion) and a standard policy for general staff.
Connect-MicrosoftTeams # Get all messaging policies Get-CsTeamsMessagingPolicy | Select-Object Identity,AllowGiphy,AllowMemes,AllowUserDeleteMessage,AllowOwnerDeleteMessage,ReadReceiptsEnabledType | Format-Table -AutoSize # Create a compliant messaging policy for regulated users New-CsTeamsMessagingPolicy -Identity "RegulatedUserPolicy" ` -AllowGiphy $false ` -AllowMemes $false ` -AllowStickers $false ` -AllowUserEditMessage $true ` -AllowUserDeleteMessage $false ` -AllowOwnerDeleteMessage $false ` -AllowPriorityMessages $false ` -ReadReceiptsEnabledType UserPreference # Create a standard policy for general staff New-CsTeamsMessagingPolicy -Identity "StandardPolicy" ` -AllowGiphy $true ` -GiphyRatingType Moderate ` -AllowMemes $true ` -AllowUserDeleteMessage $true ` -AllowPriorityMessages $true # Assign a messaging policy to a user Grant-CsTeamsMessagingPolicy -Identity "user@contoso.com" -PolicyName "RegulatedUserPolicy" # Remove custom assignment (revert to Global policy) Grant-CsTeamsMessagingPolicy -Identity "user@contoso.com" -PolicyName $null
📱 Module 10: Apps — Management & Policies
The Apps section in the Teams Admin Center governs what apps — Microsoft-built, partner-built, and custom — can be installed and used within Teams. App governance is a three-layer model: Org-level app settings (master on/off switches), App permission policies (what apps are available to which users), and App setup policies (what apps are pre-pinned to the Teams navigation bar).
App Governance Three-Layer Model
| Layer | What It Controls | Where Configured |
|---|---|---|
| 1. Org-wide app settings | Master switches — allow/block third-party apps for the entire tenant; allow/block custom (LOB) apps for the entire tenant | Apps → Manage apps → Org-wide app settings |
| 2. Per-app allow/block status | Individual app allow or block status — overrides user policy if blocked at org level | Apps → Manage apps → Per-app toggle |
| 3. App permission policy | Which apps (Microsoft, third-party, custom) are available to specific users or groups via policy assignment | Apps → Permission policies → Assign to users/groups |
| 4. App setup policy | Which apps appear pinned in the Teams left rail navigation bar for a user — pre-install and pin apps automatically | Apps → Setup policies → Pinned apps list |
Manage Apps, Permission Policies & App Setup Policies
Audit all apps in the tenant app catalogue, configure app permission policies to restrict third-party apps, and create a custom setup policy to pin specific apps for all users.
Connect-MicrosoftTeams # Get all apps in the Teams app catalogue Get-CsTeamsApp | Select-Object Id,DisplayName,DistributionMethod,ExternalId | Sort-Object DistributionMethod,DisplayName | Format-Table -AutoSize # Get all app permission policies Get-CsTeamsAppPermissionPolicy | Select-Object Identity,DefaultCatalogApps,GlobalCatalogApps,PrivateCatalogApps | Format-Table -AutoSize # Block all third-party apps (only allow Microsoft + custom apps) New-CsTeamsAppPermissionPolicy -Identity "BlockThirdPartyApps" ` -DefaultCatalogApps AllowedAppList ` -GlobalCatalogApps BlockedAppList ` -PrivateCatalogApps AllowedAppList # Get all app setup policies Get-CsTeamsAppSetupPolicy | Select-Object Identity,AllowUserPinning,AllowSideloading | Format-Table -AutoSize # Assign an app setup policy to a user Grant-CsTeamsAppSetupPolicy -Identity "frontlineworker@contoso.com" -PolicyName "FrontlineWorkers"
📊 Module 11: Analytics, Reports & Notifications
The Analytics & reports blade gives administrators actionable insight into Teams adoption, usage trends, and call quality. The Call Quality Dashboard (CQD) is the primary tool for diagnosing audio/video quality issues at scale — it aggregates call quality telemetry for every call and meeting in the tenant and is available at cqd.teams.microsoft.com.
Available Reports in Teams Admin Center
| Report | What It Shows | Data Range |
|---|---|---|
| Teams user activity | Per-user breakdown of messages sent, calls, meetings attended, and meeting minutes | 7, 30, 90, 180 days |
| Teams device usage | Which devices (Windows, Mac, mobile, web, Rooms) users are accessing Teams from | 7, 30, 90, 180 days |
| Teams usage | Active teams, active channels, active users per team — identify stale or abandoned teams | 7, 30, 90, 180 days |
| PSTN usage report | Every PSTN call with duration, caller, callee, cost, and call type (calling plan vs Direct Routing) | Up to 90 days |
| PSTN minute pools | Calling Plan minutes consumed vs remaining for the month — zone A minutes (UK/US/EU) | Current billing period |
| Call Quality Dashboard | Poor call percentage, stream quality, network jitter/packet loss/round-trip metrics by location, subnet, device, or user | Rolling 28 days (CQD) — last 30 min available for recent sessions |
| Direct Routing health dashboard | SBC status, SIP options heartbeat, active calls per SBC — real-time monitoring of Direct Routing infrastructure | Real-time + 7-day trend |
Export Teams Usage & PSTN Reports via Microsoft Graph
Pull Teams activity reports programmatically via Microsoft Graph PowerShell for automated governance reporting, inactive user identification, and PSTN cost analysis.
Connect-MgGraph -Scopes "Reports.Read.All" # Export Teams user activity report (last 30 days) Invoke-MgGraphRequest -Method GET ` "https://graph.microsoft.com/v1.0/reports/getTeamsUserActivityUserDetail(period='D30')" ` -OutputFilePath "TeamsUserActivity30Days.csv" Write-Host "Teams user activity report exported." # Export Teams device usage report Invoke-MgGraphRequest -Method GET ` "https://graph.microsoft.com/v1.0/reports/getTeamsDeviceUsageUserDetail(period='D30')" ` -OutputFilePath "TeamsDeviceUsage30Days.csv" # Get Teams activity summary counts $Summary = Invoke-MgGraphRequest -Method GET ` "https://graph.microsoft.com/v1.0/reports/getTeamsUserActivityCounts(period='D30')" $Summary.value | Format-Table # Get all Teams-mode users for governance review Connect-MicrosoftTeams Get-CsOnlineUser -ResultSize Unlimited | Where-Object {$_.TeamsUpgradeEffectiveMode -eq "TeamsOnly"} | Select-Object DisplayName,SipAddress,WhenChanged | Export-Csv -Path "AllTeamsUsers.csv" -NoTypeInformation
🎓 Module 12: MS-700 Certification Alignment
The MS-700: Managing Microsoft Teams certification validates your ability to plan, deploy, configure, and manage Microsoft Teams as a collaboration, calling, and meeting platform. This guide covers all four MS-700 exam skill domains.
Plan and Configure a Microsoft Teams Environment
Network settings, QoS, Teams Phone connectivity options (Calling Plans vs Operator Connect vs Direct Routing), security & compliance, guest & external access, Teams upgrade modes — Modules 1, 4, 7
Manage Chat, Teams, Channels, and Apps
Team types & lifecycle, channel types (Standard vs Private vs Shared), Teams policies, app permission & setup policies, custom apps, team templates — Modules 2, 3, 9, 10
Manage Meetings and Calling
Meeting policies (lobby, recording, transcription, Copilot), audio conferencing, webinars, town halls (Live Events retirement), auto attendants, call queues, voicemail — Modules 5, 6, 7, 8
Monitor, Report, and Troubleshoot
Teams usage reports, PSTN reports, Call Quality Dashboard (CQD), Direct Routing health dashboard, alert rules, call analytics per user — Module 11
✅ MS-700 Exam Study Tips
- Know the difference between Guest access and External access precisely — guest access creates an Entra ID B2B account and allows full team membership; external access is federated 1:1 chat only with no team membership or file access
- Understand all three Teams Phone connectivity options — Calling Plans (Microsoft-managed), Operator Connect (carrier-managed via Microsoft interconnect), and Direct Routing (customer-managed SBC) — and when each is appropriate
- Study the meeting lobby policy settings (AutoAdmittedUsers) in depth — know every value and what combination of organiser, co-organiser, internal users, guests, and anonymous users each setting admits directly vs holds in lobby
- Memorise the call queue routing algorithms — Attendant routing (all agents ring simultaneously), Serial routing (agents ring in order), Round Robin, and Longest Idle — and when each is appropriate
- Know that Town Halls replaced Live Events in October 2024 —
CsTeamsMeetingBroadcastPolicyis deprecated; useCsTeamsEventsPolicy - Understand policy precedence: user-assigned policy beats group policy beats Global (Org-wide default) policy — and that group policy assignment is asynchronous (may take up to 24 hours to apply)
- Study Teams Phone resource accounts thoroughly — auto attendants and call queues each require a resource account; the resource account must have a Virtual Phone System licence or Teams Phone Resource Account licence and a phone number assignment
- Practice the Teams PowerShell module — know
Get-CsTeamsMeetingPolicy,New-CsTeamsMeetingPolicy,Grant-CsTeamsMeetingPolicy, and the pattern that applies to allCs*policy cmdlets
💡 Best Practices Summary
- Implement Teams team governance from day one — restrict team creation to approved users via Entra ID Group creation policy, require a naming convention (e.g. DEPT-ProjectName), and enforce minimum two owners per team
- Set the global meeting policy to require lobby for guests and anonymous users — never set AutoAdmittedUsers to “Everyone” for the Global policy as this allows anonymous attendees to bypass the lobby on all meetings
- Use Teams templates for repeatable team types (Project, Incident Response, Onboarding) — templates pre-create channels, tabs, and apps ensuring consistent structure across all new teams of that type
- Enable audio conferencing for all licensed users who host external meetings — dial-in access is essential when participants are in locations with poor internet or are joining from a traditional phone
- Always assign at least two resource account licences when building auto attendant and call queue chains — you need one resource account per auto attendant and per call queue in the call routing path
- Review the Call Quality Dashboard (CQD) weekly during the first 90 days of a Teams rollout — identify poor-quality subnets, device types with high failure rates, and buildings with network issues before users escalate to helpdesk
- Configure Teams Notifications & Alerts for call quality degradation and Teams service health — proactive monitoring prevents slow degradation going unnoticed until a major user complaint
- Use group-based policy assignment (New-CsBatchGroupPolicyAssignmentOperation) for all policy assignments at scale — individual user assignments are hard to audit and govern across large tenants
- Archive rather than delete inactive teams — archiving makes the team read-only, preserves all content and chat history, and keeps the team searchable; deletion permanently removes all content after 30 days
- Enforce Teams Premium for regulated meetings (watermarking, end-to-end encryption, sensitivity labels on meetings, advanced webinar registration) in financial, legal, and healthcare scenarios
📚 References & Further Reading
- 🔗 Microsoft Teams Documentation — Microsoft Learn
- 🔗 MS-700: Teams Administrator Associate Certification — Microsoft Learn
- 🔗 Microsoft Teams PowerShell Overview — Microsoft Learn
- 🔗 Direct Routing Documentation — Microsoft Learn
- 🔗 Town Halls in Microsoft Teams — Microsoft Learn
- 🔗 Call Quality Dashboard (CQD) — cqd.teams.microsoft.com
- 🔗 Microsoft Teams Admin Center — admin.teams.microsoft.com
- 🔗 Microsoft 365 Developer Program (Free Lab Tenant) — developer.microsoft.com
