PowerShell scripts for automating Microsoft Teams administration tasks. Handle user provisioning, team creation, policy management, and governance at scale. Built for IT admins managing enterprise Teams environments.
- Bulk Team Creation from templates or CSV
- User Provisioning with automatic policy assignment
- Channel Management across multiple teams
- Guest Access Control and external sharing
- Compliance Reporting for governance
- Automated Cleanup of inactive teams
# Create teams from CSV
Import-Csv teams.csv | ForEach-Object {
New-Team -DisplayName $_.TeamName `
-Description $_.Description `
-Visibility $_.Type `
-Template $_.Template
}
# Archive old teams
Get-Team | Where {$_.LastActivity -lt (Get-Date).AddDays(-180)} |
Set-TeamArchivedState -Archived $true
# Clone team structure
Copy-TeamStructure -SourceTeam "Template Team" `
-NewTeamName "Q2 Project Team"
# Add users to multiple teams
$users = Get-Content users.txt
$teams = "Sales", "Marketing", "Support"
Add-UsersToTeams -Users $users -Teams $teams
# Set policies for department
Get-CsOnlineUser -Filter "Department eq 'Engineering'" |
Grant-CsTeamsMessagingPolicy -PolicyName "EngineeringPolicy"
# Remove external users
Get-TeamUser -GroupId $teamId |
Where {$_.User -like "*#EXT#*"} |
Remove-TeamUser
# Create standard channels
$channels = @("General", "Planning", "Development", "Testing")
$channels | ForEach {
New-TeamChannel -GroupId $teamId -DisplayName $_
}
# Set channel permissions
Set-TeamChannelPermissions -Channel "Confidential" `
-AllowNewPosts "Owners"
# Install Teams module
Install-Module MicrosoftTeams
Import-Module MicrosoftTeams
# Connect to Teams
Connect-MicrosoftTeams
# Load toolkit
. .\TeamsAutomation.ps1
# Run first automation
New-BulkTeams -Template "ProjectTeam" -Count 10
New-BulkTeams.ps1
- Create multiple teamsImport-TeamsFromCSV.ps1
- CSV-based provisioningNew-DepartmentTeam.ps1
- Department-specific teamsClone-TeamTemplate.ps1
- Duplicate team structuresNew-ClassTeams.ps1
- Education class teams
Add-BulkMembers.ps1
- Add users to teamsSync-ADGroups.ps1
- Sync with Active DirectorySet-UserPolicies.ps1
- Apply policies in bulkRemove-InactiveUsers.ps1
- Clean up inactive membersExport-TeamMembers.ps1
- Membership reports
Get-TeamsActivity.ps1
- Activity reportsFind-OrphanedTeams.ps1
- Teams without ownersSet-TeamExpiration.ps1
- Lifecycle managementAudit-GuestAccess.ps1
- External user auditEnforce-NamingPolicy.ps1
- Naming conventions
Archive-OldTeams.ps1
- Archive inactive teamsClean-DeletedTeams.ps1
- Purge soft-deleted teamsUpdate-TeamSettings.ps1
- Bulk settings updatesBackup-TeamConfig.ps1
- Configuration backupRestore-Team.ps1
- Restore from backup
# Define team template
$template = @{
Channels = @("General", "Planning", "Development")
Apps = @("Planner", "OneNote", "GitHub")
Settings = @{
AllowGuestAccess = $false
AllowMemberAddRemove = $true
}
}
# Apply template
New-TeamFromTemplate -Template $template -Name "New Project"
# Create custom policy
New-CsTeamsMessagingPolicy -Identity "RestrictedChat" `
-AllowUserChat $false `
-AllowGiphy $false
# Apply to users
Grant-PolicyToGroup -Group "Interns" -Policy "RestrictedChat"
# Generate usage report
Get-TeamsUsageReport -Days 30 |
Export-Excel -Path "TeamsUsage.xlsx" -AutoSize
# Compliance audit
Get-TeamsComplianceReport |
Send-MailMessage -To "compliance@company.com"
# Daily team cleanup
Register-ScheduledTask -TaskName "TeamsCleanup" `
-Action (New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-File C:\Scripts\Clean-Teams.ps1") `
-Trigger (New-ScheduledTaskTrigger -Daily -At 2am)
# Robust error handling
try {
New-Team -DisplayName $name
} catch {
Write-Log "Failed to create team: $_"
Send-Alert -Message "Team creation failed"
}
Handle thousands of users/teams efficiently:
# Parallel processing
$teams | ForEach-Object -Parallel {
Set-TeamPicture -GroupId $_.GroupId -ImagePath "logo.png"
} -ThrottleLimit 5
# Batch processing
Process-InBatches -Items $users -BatchSize 100 -ScriptBlock {
param($batch)
Add-TeamUser -GroupId $teamId -Users $batch
}
- RBAC Support - Role-based access control
- Audit Logging - Track all changes
- MFA Required - Multi-factor authentication
- Secure Storage - Encrypted credentials
- Compliance Ready - GDPR/HIPAA compliant
Issue | Solution |
---|---|
Connection timeout | Use Connect-MicrosoftTeams -UseDeviceAuthentication |
Throttling | Implement delays between operations |
Permission denied | Check Teams admin role assignment |
Team not found | Ensure team is not archived |
Share your Teams automation scripts with the community!
MIT License - Free for all use