With everyone working at home at the moment, you might need to grab a report of the User Policies for MS Teams. These few steps will show you how to grab all the users and display in a csv file.
To work with policies you first need to obtain the PowerShell module – SkypeOnlineConnector. Which you can download from this link https://www.microsoft.com/en-us/download/details.aspx?id=39366
Installing the SkypeOnlineConnector and creating a session
Once you have installed the PowerShell module you will need to import the module and create a PowerShell session.
Import-Module "C:\\Program Files\\Common Files\\Skype for Business Online\\Modules\\SkypeOnlineConnector\\SkypeOnlineConnector.psd1" | |
$Session = New-CsOnlineSession | |
Import-PSSession -Session:$Session -AllowClobber |
You will be prompted for MS Teams administrator username and password, you can pass your credentials in with the -credential parameter at the end of New-CsOnlineSession, however this doesn’t work with MFA.
Once connected you will be able to grab all users using the Get-CsOnlineUser cmdlet, or grab one user by providing the users Identity.
- Get-CsOnlineUser -Gets all users
- Get-CsOnlineUser -Identity: my.user@tenant.onmicrosoft.com | fl –Gets single user
Policies
If you call the above for a single user you will see that there are loads of policies that can be set. Not all are MS Teams related. The ones I will be focusing on are the same 12 policies you see when you view Assigned policies for a user in Teams Administration.
These policies are named slightly different in the results compared to the display name shown above.
Display Name | Policy Name |
Meeting policy | TeamsMeetingPolicy |
Messaging policy | TeamsMessagingPoliy |
Live events policy | TeamsMeetingBroadcastPolicy |
App permission policy | TeamsAppPermissionPolicy |
App setup policy | TeamsAppSetupPolicy |
Call park policy | TeamsCallParkPolicy |
Calling policy | TeamsCallingPolicy |
Caller ID policy | CallerIdPolicy |
Teams policy | TeamsChannelsPolicy |
Emergency calling policy | TeamsEmergencyCallingPolicy |
Emergency call routing policy | TeamsEmergencyCallRoutingPolicy |
Dial plan | TenantDialPlan |
Teams Upgrade | TeamsUpgradePolicy |
The following script will grab all users and their current policy for the above polices, with the provided path it will output to csv file.
Please note: Anything that is set to Global policy will be blank.
.\Get-UserTeamPolicies.ps1 -Path:.\AllTeamUsersPolicies.csv
param( | |
#OutPut CSV File Path | |
[Parameter(Mandatory)] | |
[string] | |
$Path | |
) | |
$InformationPreference = 'Continue' | |
Write-Information -MessageData "Obtaining Module, please connect when prompted..." | |
Import-Module "C:\\Program Files\\Common Files\\Skype for Business Online\\Modules\\SkypeOnlineConnector\\SkypeOnlineConnector.psd1" | |
$Session = New-CsOnlineSession | |
Import-PSSession -Session:$Session -AllowClobber | |
Write-Information -MessageData "Getting all enabled users" | |
$Users = Get-CsOnlineUser | Select-Object DisplayName, ` | |
UserPrincipalName, ` | |
SipAddress, ` | |
TeamsMeetingPolicy, ` | |
TeamsMessagingPolicy, ` | |
TeamsMeetingBroadcastPolicy, ` | |
TeamsAppPermissionPolicy, ` | |
TeamsAppSetupPolicy, ` | |
TeamsCallParkPolicy, ` | |
TeamsCallingPolicy, ` | |
CallerIdPolicy, ` | |
TeamsChannelsPolicy, ` | |
TeamsEmergencyCallingPolicy, ` | |
TeamsEmergencyCallRoutingPolicy, ` | |
TenantDialPlan, ` | |
TeamsUpgradePolicy | |
$Users | Export-Csv -Path:$Path -NoTypeInformation | |
Write-Information "Complete" | |
Remove-PSSession -Session:$session |
In a later blog, I will be using the csv file to update user policies.
Bonus: If you want to get all users for just a single policy you can perform a filter on the Get-CsOnlineUser
Write-host "Teams Meeting Policy" | |
Get-CsOnlineUser -Filter {TeamsMeetingPolicy -eq 'GivenPolicyNameBlankForGlobal'} | Select UserPrincipalName |