When setting up the Arist app for Teams, there are some possible complications. For example, App Setup Policies do not always apply equally for all members for your custom group, even when you explicitly assign it.
The fastest way to verify is to spot check users.
Navigate to Manage Users > select appropriate example user.
Under Apps, search for Arist and ensure it's available to them.
Under Policies, ensure the App Setup Policy applied is correct. Even when you have assigned the correct M365 Group to a custom App Setup Policy, several scenarios could cause another App Setup Policy to take precedence. In cases like this, you may have to additionally add Arist as an Installed app under the App Setup Policy that shows up for that user.
Arist recommends spot checking a diverse group of sampled users (by function, hire date, etc) to ensure your Teams configuration is correct.
To verify that the install has completed propagating, simply check that the appropriate users can see the application in Teams and can use it without requesting additional access.
Powershell automation
It's possible to check your users specifically for App Setup Policy issues using Powershell. The following Powershell snippet is a proof of concept that can be customized and used at your own risk:
# Teams App Setup Verification Script
# Verifies if a specified Teams app is configured in users' App Setup Policies
# Configuration - Modify these values for your environment
$AppId = "23ec340e-6da6-42d5-a879-0983135bf0c1" # Replace with your app's GUID
$UsersToCheck = @(
"email1", # Replace with real user emails to test against
"email2"
)
# Connect to Microsoft Teams
Connect-MicrosoftTeams
# Function to get user's app setup policy
function Get-UserAppSetupPolicy {
param($UserEmail)
try {
$policyAssignment = Get-CsUserPolicyAssignment -Identity $UserEmail -PolicyType TeamsAppSetupPolicy
return $policyAssignment.PolicyName
}
catch {
return "Error"
}
}
# Function to check if app is configured in policy
function Test-AppInPolicy {
param($PolicyName, $AppId)
try {
if ([string]::IsNullOrEmpty($PolicyName) -or $PolicyName -eq "Global") {
$policy = Get-CsTeamsAppSetupPolicy -Identity Global
} else {
$policy = Get-CsTeamsAppSetupPolicy -Identity $PolicyName
}
$inInstalled = $policy.AppPresetList | Where-Object { $_.Id -eq $AppId }
$inPinned = $policy.PinnedAppBarApps | Where-Object { $_.Id -eq $AppId }
return @{
InInstalled = $inInstalled -ne $null
InPinned = $inPinned -ne $null
}
}
catch {
return @{
InInstalled = $false
InPinned = $false
}
}
}
# Main verification
Write-Host "Teams App Verification Report - $(Get-Date)" -ForegroundColor Cyan
Write-Host "App ID: $AppId`n" -ForegroundColor Gray
$results = @()
foreach ($userEmail in $UsersToCheck) {
Write-Host "Checking: $userEmail" -ForegroundColor Yellow
$currentPolicy = Get-UserAppSetupPolicy -UserEmail $userEmail
$appCheck = Test-AppInPolicy -PolicyName $currentPolicy -AppId $AppId
$result = [PSCustomObject]@{
UserEmail = $userEmail
Policy = if ([string]::IsNullOrEmpty($currentPolicy)) { "Global" } else { $currentPolicy }
InInstalled = $appCheck.InInstalled
InPinned = $appCheck.InPinned
Status = if ($appCheck.InInstalled -or $appCheck.InPinned) { "✅ Configured" } else { "❌ Not Configured" }
}
$results += $result
Write-Host " Policy: $($result.Policy)" -ForegroundColor White
Write-Host " Status: $($result.Status)" -ForegroundColor $(if($result.Status -like "*Configured*") {"Green"} else {"Red"})
Write-Host ""
}
# Summary
$configured = ($results | Where-Object {$_.InInstalled -or $_.InPinned}).Count
$total = $results.Count
Write-Host "Summary:" -ForegroundColor Cyan
Write-Host " Total users checked: $total" -ForegroundColor White
Write-Host " Users with app configured: $configured" -ForegroundColor Green
Write-Host " Users needing configuration: $($total - $configured)" -ForegroundColor $(if(($total - $configured) -gt 0) {"Red"} else {"Green"})
# Show users needing attention
if ($configured -lt $total) {
Write-Host "`nUsers needing configuration:" -ForegroundColor Yellow
$results | Where-Object {-not ($_.InInstalled -or $_.InPinned)} | ForEach-Object {
Write-Host " - $($_.UserEmail) ($($_.Policy))" -ForegroundColor Red
}
}
# Disconnect
Disconnect-MicrosoftTeams
Still need help?
Contact us