Teams Koexistenz-Konfiguration

Auf der Seite Teams Umstellung beschreibe ich die verschiedenen Koexistenz-Betriebsarbeiten von Skype for Business Online und Teams. Diese Seite widmet sich nun der Konfiguration und technischen Details.

Hinweis:
Ich beschreibe hier die Konfiguration in Office 365. Einige Commandlets wie z.B. *-CsTeamsUpgradePolicy" gibt es auch On Premises, obwohl es dort kein Teams gibt. Diese Einstellungen dienen auch nicht dazu die Richtlinien über AADConnect in die Cloud zu replizieren sondern zur Konfiguration des lokalen Skype for Business Clients. Gerade während einer Einführung mit Teams ist es nicht ungewöhnlich, dass Die Benutzer Teams in der Cloud schon nutzen aber dennoch mit Skype for Business auf lokalen Servern arbeiten.

Teams PowerShell oder Browser!

Die Verwaltung von Teams ist auch Mittel 2018 noch sehr variabel. Den vollständigen Funktionsumfang haben Sie natürlich immer mit der Powershell. Eine Teilmenge der Einstellmöglichkeiten ist aber auch über einen Browser möglich. Wobei es hier schon wieder mindestens zwei URls gibt

  • Office 365 Portal
    Hier können sie manuell Benutzer anlegen, wenn diese nicht über das Office 365 Identity Management angelegt wird. Auch die Lizenz können Sie hier zuweisen und anhand des UPNs wird auch die SIP-Adresse gebildet
  • Teams and Skype Admin Center
    https://admin.teams.microsoft.com/
    Es ist offensichtlich, dass Microsoft die Konfiguration von Teams (und Skype) in diesem neuen Portal zusammenfassen will. Allerdings ist noch lange nicht alles umgestellt, so dass es hier auch noch den Verweis zu anderen Webseiten gibt
  • Skype for Business Control Panel
    https://webdir2a.online.lync.com/LSCP (oder anderer Tenants)
    Das klassische CSCP gibt es auch in der Cloud und zumindest für die Verwaltung von Rufnummern ist dieser Weg noch erforderlich.

Per Teams PowerShell geht natürlich schon immer alles, was der Administrator selbst einstellen darf. Wobei es die Teams PowerShell in der Form gar nicht gibt, da Teams und Skype for Business Online die gleiche PowerShell nutzen. Es ist als schon irgendwie zu sehen, dass Teams und Skype schon das gleiche Backend nutzen.

TeamsInteropPolicy (Archiv)

Diese Commandlets sind aktuell noch vorhanden aber nicht mehr funktionsfähig, Nutzen Sie stattdessen Grant-CSTeamsUpdatePolicy

Der Wechsel in der Verwaltung erkennen sie schon an den Einstellungen, welcher Benutzer welchen Client benutzt. Anfangs musste Sie als Administrator über mehrere Commandlets die richtige Konfiguration vornehmen. Nicht alle einstellbaren Optionen waren dabei gültig oder sinnvoll und wurden auch nicht übernommen. Von den CSteamsInteropPolices wurden auch einige Werte im Laufe der Zeit gestrichen. So konnte ich eine Zeitlang folgenden Fehler sehen

Von diesen Policies sind aber nur noch drei nutzbar, denn bei dem  Versuch die anderen Optionen zu nutzen, bekommen Sie einen Fehler:

TeamsInteropPolicy no longer supports granting policy instances in which the value of CallingDefaultClient differs from the value of ChatDefaultClient. It also no longer
supports granting instances in which AllowEndUserClientOverride=true.
Only these three instances are supported:
  DisallowOverrideCallingDefaultChatDefault
  DisallowOverrideCallingTeamsChatTeams
  DisallowOverrideCallingSfbChatSfb
In the near future, the other instances will be removed and Users will be automatically assigned one of the supported instances. If you are sure you want to temporarily
grant a non-supported instance of TeamsInteropPolicy, you can override this warning with -Force.

Nur zur Vollständigkeit hier einmal die komplette Liste, von denen vier Einträge schon nicht mehr genutzt werden können

Import-Module skypeonlineconnector 
$sfbonlinesession=New-CsOnlineSession
Import-PSSession $sfbonlinesession

Get-CsTeamsInteropPolicy | ft identity,AllowEndUserClientOverride,CallingDefaultClient,ChatDefaultClient

Identity                                      AllowEndUserClientOverride CallingDefaultClient ChatDefaultClient
--------                                      -------------------------- -------------------- -----------------
Global                                                             False Default              Default
Tag:DisallowOverrideCallingDefaultChatDefault                      False Default              Default
Tag:DisallowOverrideCallingTeamsChatTeams                          False Teams                Teams
Tag:DisallowOverrideCallingSfbChatTeams                            False Sfb                  Teams
Tag:AllowOverrideCallingDefaultChatTeams                            True Default              Teams
Tag:DisallowOverrideCallingDefaultChatTeams                        False Default              Teams
Tag:AllowOverrideCallingDefaultChatDefault                          True Default              Default
Tag:DisallowOverrideCallingSfbChatSfb                              False Sfb                  Sfb

Wenn Sie also noch Verweise auf diese Policies sehen, dann haben Sie einen alten KB-Artikel oder Blog-Eintrag gefunden.

Das gleiche gilt für Get-CsTeamsMigrationConfiguration, welches auch obsolet ist.

CSTeamsUpgradePolicy

Der richtige Weg zur Konfiguration der Einstellungen pro Benutzer geht nun über CsTeamsUpgradePolicy. Hiervon gibt es mehrere Richtlinien.

Get-CsTeamsUpgradePolicy | ft identity,mode,notifySfbUsers,Action,Description -AutoSize

Identity                         Mode               NotifySfbUsers Action  Description
--------                         ----               -------------- ------  -----------
Global                           Islands                     False None    Use either Skype for Business client or Teams client
Tag:NoUpgrade                    Legacy                      False None Users can use either Skype for Business client or Teams client
Tag:NotifyForTeams               Legacy                       True Notify  Show notification of pending upgrade in Skype for Business client
Tag:UpgradeToTeams               TeamsOnly                   False Upgrade Use Teams Only
Tag:Islands                      Islands                     False None    Use either Skype for Business client or Teams client
Tag:IslandsWithNotify            Islands                      True Notify  Use either Skype for Business client or Teams client
Tag:SfBOnly                      SfBOnly                     False None    Use only Skype for Business
Tag:SfBOnlyWithNotify            SfBOnly                      True Notify  Use only Skype for Business
Tag:SfBWithTeamsCollab           SfBWithTeamsCollab          False None    Use Skype for Business and use Teams only for group collaboration
Tag:SfBWithTeamsCollabWithNotify SfBWithTeamsCollab           True Notify  Use Skype for Business and use Teams only for group collaboration

Sie sehen hier einmal die "Global"-Richtlinie, die automatisch an alle Teams-Benutzer zugewiesen wird, die keine abweichende manuell zugewiesene Policy haben. Diese Richtlinien können sie nicht verändern. Sie sind durch Microsoft vorgegeben. Es gibt also kein Set-CsTeamsUpgradePolicy-Commandlet.

Policy am Tenant zuweisen.

Wenn Sie das Teams Admin Center ansurfen, dann können Sie die globale "Default Einstellung" per Browser ändern. Allerdings gibt es hier meist nur wenige Einstellmöglichkeiten.

Je nach Tenants sehen vielleicht auch noch "Teams Only" als Auswahl. Ich habe aber (Stand Nov 2018) noch nicht gesehen, dass ich hier "SfBwithTeamsCollab" oder "SfBwithTeamsCollabandMeeting" auswählen kann. Die Einstellung erfolgt im Tenant und kann per Powershell wie folgt angezeigt werden:

PS C:\> Get-CsTenant | fl *teams*

TeamsUpgradeOverridePolicy       :
DisableTeamsProvisioning         : False
TeamsUpgradeEligible             : False
TeamsUpgradeEffectiveMode        : Islands
TeamsUpgradeNotificationsEnabled : False
TeamsUpgradePolicyIsReadOnly     : None

Hier ist der TeamsUpgradeEffectiveMode relevant. Es gibt allerdings kein "Set-CsTenant". Die Einstellung kann wie folgt geändert werden.

Grant-CsTeamsUpgradePolicy -Global -PolicyName tag:sfbwithteamscollab 
Get-CsTenant).teamsupgradeeffectivemode
SfBWithTeamsCollab

Hier sind auch die anderen Zwischenstellungen möglich. Die für ihre Umgebung passende Einstellung können Sie anhand der Beschreibung auf den folgenden Seiten ermitteln.

Policy pro Benutzer anzeigen

Sie können an den Policies selbst also nichts ändern aber sehr wohl den Benutzern abweichende Policies zuweisen. Das ist für die später anstehende globale Umstellung wichtig zu wissen. Also schauen wir erst einmal, wie viele Benutzer welche abweichende Policies haben:

Get-CsOnlineUser | group TeamsUpgradePolicy -NoElement

Count Name
----- ----
   65
    1 SfBOnly
    1 SfBWithTeamsCollab
    2 UpgradeToTeams

Hier gibt es also 65 Benutzer, bei denen das Feld TeamsUpgradePolicy nicht gefüllt ist und damit sich nach der globalen Richtlinie orientieren. Über einen Filter kann die Liste der Ausnahmen sehr schnell ermittelt werden

Get-CsOnlineUser `
   -Filter {TeamsUpgradePolicy -ne $null} `
| ft sipaddress,TeamsUpgradeEffectiveMode,TeamsUpgradePolicy

SipAddress                                TeamsUpgradeEffectiveMode TeamsUpgradePolicy
----------                                ------------------------- ------------------
sip:fctest1@uclabor.de                    SfBOnly                   SfBOnly
sip:fctest2@uclabor.de                    SfBWithTeamsCollab        SfBWithTeamsCollab
sip:fctest3@uclabor.de                    TeamsOnly                 UpgradeToTeams
sip:fctest4@uclabor.de                    TeamsOnly                 UpgradeToTeams

Sie sehen hier auch das Feld "TeamsUpgradeEffectiveMode", welches bei allen Personen, die nicht manuell konfiguriert sind, die globale Standardeinstellung zeigt.

Get-CsOnlineUser | ft sipaddress,TeamsUpgradeEffectiveMode,TeamsUpgradePolicy

SipAddress                                                                                   TeamsUpgradeEffectiveMode TeamsUpgradePolicy
----------                                                                                   ------------------------- ------------------
sip:SFBOOnly@uclabor.de                                                                      Islands
sip:User1@uclabor.de                                                                         Islands
sip:Cloudde3@uclabor.de                                                                      Islands
                                                                                             Islands
sip:adm-fcarius@UCLABOR.DE                                                                   Islands
sip:fctest2@uclabor.de                                                                       SfBWithTeamsCollab        SfBWithTeamsCollab
sip:fctest4@uclabor.de                                                                       TeamsOnly                 UpgradeToTeams
...

Beachten Sie bei Auswertungen, dass "Get-CSOnlineUser" auch Objekte liefert, die keine SIP-Adresse haben. Benutzer, die keine Skype for Business Lizenz haben, können durchaus eine Teams Lizenz haben. Ohne SIP-Adresse wird das mit der Federation und Koexistenz natürlich knifflig.

Im Vergleich zur PowerShell sehne Sie im Teams Admin Center deutlich weniger.

Konfiguration ändern

Über die GUI kann ich beim Benutzer nur einen Teil der Policies zuweisen.

Da bleibe ich doch lieber bei der Powershell, mit der ich effektiv und schnell die Änderungen durchführen kann.

Grant-CsTeamsUpgradePolicy fctest1@uclabor.de -PolicyName Tag:IslandsWithNotify
Grant-CsTeamsUpgradePolicy fctest2@uclabor.de -PolicyName Tag:SfBOnlyWithNotify
Grant-CsTeamsUpgradePolicy fctest3@uclabor.de -PolicyName Tag:SfBWithTeamsCollabWithNotify
Grant-CsTeamsUpgradePolicy fctest4@uclabor.de -PolicyName Tag:SfBWithTeamsCollabAndMeetings 
Grant-CsTeamsUpgradePolicy fctest5@uclabor.de -PolicyName Tag:IslandsWithNotify

Wichtig:
Benutzer, die in Teams mit Instant Messaging (Chat) und Präsenz arbeiten wollen und mit Skype for Business Partnern federieren, müssen ggfls. vorher nach Skype for Business Online migriert werden. Die PowerShell warnt aber auch davor

Grant-CsTeamsUpgradePolicy -Identity user3@msxfaq.de -PolicyName tag:UpgradeToTeams

User "user3@msxfaq.de" is homed on-premises in a Skype for Business or Lync deployment. On-premises users can be
upgraded to Teams using Move-CsUser in the on-premises tools. For details, see http://aka.ms/UpgradeToTeams
    + CategoryInfo          : NotSpecified: (CN=79cb73ea-6cc...c1e001,DC=local:OCSADUserOrAppContact) [Grant-CsTeamsUp
   gradePolicy], OnpremUserInvalidOperationException
    + FullyQualifiedErrorId : GrantPolicy,Microsoft.Rtc.Management.AD.Cmdlets.AssignCSTeamsUpgradePolicyCmdlet
    + PSComputerName        : admin1e.online.lync.com

Welche Policies alles verwendet werden können, erhalten Sie über Get-CsTeamsUpgradePolicy. Entsprechend werden davon abgeleitet die drei Einstellungen vorgenommen:

Policy TeamsUpgradeEffectiveMode TeamsUpgradeNotificationsEnabled TeamsUpgradePolicy
$null

Je nach Default Einstellung der "global" Policy

Tag:NoUpgrade

Legacy

False

NoUpgrade

Tag:NotifyForTeams

Islands

True

$null

Tag:UpgradeToTeams

Islands

False

$null

Tag:Islands

Islands

False

$null

Tag:IslandsWithNotify

TeamsOnly

True

NotifyForTeams

Tag:SfBOnly

Islands

False

IslandsWithNotify

Tag:SfBOnlyWithNotify

SfBOnly

True

SfBOnlyWithNotify

Tag:SfBWithTeamsCollab

SfBWithTeamsCollab

False

SfBWithTeamsCollabWithNotify

Tag:SfBWithTeamsCollabWithNotify

SfBWithTeamsCollab

True

SfBWithTeamsCollab

Tag:SfBWithTeamsCollabAndMeetings

geplant

geplant

geplant

Bei der Zuweisung kann es durchaus zur ein oder anderen Warnung kommen wie:

Grant-CsTeamsUpgradePolicy fctest2@uclabor.de -PolicyName Tag:UpgradetoTeams

WARNUNG: Users with this policy will become full Teams-only Users. They will no longer be able to use Skype for Business clients,
except to join Skype for Business meetings. For details, see http://aka.ms/UpgradeToTeams

Grant-CsTeamsUpgradePolicy fctest2@uclabor.de -PolicyName Tag:SfBOnlyWithNotify
WARNUNG: Object with identity "CN=xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx,OU=xxxx-xxxx-xxxx-xxxx-xxxx,OU=OCS Tenants,DC=lync2a001,DC=local" was successfully
changed, but due to current network conditions the change may not be reflected immediately.

Hinweis: Änderungen an diesen Einstellungen können bis zu 24h brauchen, ehe Sie aktiv sind
Kontrollieren Sie einfach, ob die Einstellung unter TeamsUpgradeEffectiveMode zu TeamsUpgradePolicy passt.

Einstellungen im Teams Admin Center

Schauen wir und doch einfach mal die Einstellmöglichkeiten an. Da gibt es einmal die globale Einstellung pro Tenant, die Sie auch einfach auf der Webseite https://admin.teams.microsoft.com/company-wide-settings/teams-upgrade einstellen können. Ende Juni 2018 gab es folgende Auswahl.

Damit wird aber keine globale Einstellung am Tenant selbst umgestellt, sondern nur die "Default CsTeamsUpgradePolicy", die für alle Benutzer gilt, bei denen nichts anderes abweichend eingestellt ist.

Dennoch ist die Warnung bei der Umstellung auf "Teams Only" erst einmal für viele Administratoren eine Schrecksekunde.

Vor der Umstellung des globalen Defaults sollten Sie also sicherstellen, dass alle Benutzer wie gewünscht konfiguriert sind

Hinweis auf dem Client

Wenn Sie die Upgrade-Polices genau angeschaut haben, dann gibt es da einige Richtlinien mit einem "Notify" im Namen.

Get-CsTeamsUpgradePolicy | ? {$_.NotifySfbUsers -eq $true } | ft identity,mode,notifySfbUsers,Action,Description -AutoSize

Identity                         Mode               NotifySfbUsers Action  Description
--------                         ----               -------------- ------  -----------
Tag:NotifyForTeams               Legacy                       True Notify  Show notification of pending upgrade in Skype for Business client
Tag:IslandsWithNotify            Islands                      True Notify  Use either Skype for Business client or Teams client
Tag:SfBOnlyWithNotify            SfBOnly                      True Notify  Use only Skype for Business
Tag:SfBWithTeamsCollabWithNotify SfBWithTeamsCollab           True Notify  Use Skype for Business and use Teams only for group collaboration

Mit diesen Einstellungen bekommt der Anwender die Information im Skype for Business Client eingeblendet, dass er Teams verwenden kann oder verwenden muss.

Diese Meldung erhält z.B. ein Client, der auf "Teams Only" umgestellt wurde.

Wenn ein Skype Anwender mit einem Teams-Anwender chattet, dann ist auch das zu sehen

Auch in Teams sehen ich, wenn ich per Federation einen Skype for Business Anwender anspreche:

Wenn mein Benutzer komplett auf "Teamsonly" umgestellt wurde, dann kann ich den Skype Client zwar noch starten und mich anmelden aber werde direkt auf Teams verwiesen:

Für mich etwas unverständlich bleibt der Skype Client aber im Hintergrund dennoch aktiv.

CSTeamsUpgradeConfiguration

Diese Einstellung steuert Tenant-weit, ob der Skype for Business Client im Hintergrund schon die Team-Applikation herunterlädt und mit welchem Client der Teilnehmer in Skype for Business Meetings teilnimmt. Die beiden Werte stehen damit zwar in der gleichen Einstellung aber haben aus meiner Sicht nicht wirklich was miteinander zu tun. die CSUpgradePolicy ist hier viel wichtiger. Die Einstellung ist auch nur global. Sie können also nicht weitere Konfigurationen mittels New-CSTeamsUpgradeConfiguration erstellen und mit Grant-CSTeamsUpgradeConfiguration individuell an Benutzer zuweisen. Diese Commandlets gibt es schlicht noch nicht und ich weiß nicht ob sie überhaupt noch kommen.

PS C:\> Get-CsTeamsUpgradeConfiguration

Identity         : Global
DownloadTeams    : True
SfBMeetingJoinUx : NativeLimitedClient

Vielleich war es ja mal geplant aber wird nicht mehr umgesetzt. Der Parameter "DownloadTeams" wird eh nur ausgewertet, wenn der Benutzer über eine Policy entweder ein "Notify" für die SfbUser" oder TeamsOnly als Mode hat.

Get-CSTeamsUpgradeStatus

Dieses Commandlet finde ich zwar in meiner Teams PowerShell aber ich habe keine Beschreibung dazu. Ich könnte mir vorstellen, dass hier ein Status beim Wechsel von Skype zu Teams zu finden ist. Mit dem Umstieg auf "TeamsOnly" werden ja auch die Buddy-Listen von Skype for Business zu Teams übertragen.

Get-CsTeamsUpgradeStatus

RunspaceId           : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId             : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State                : Null
OptInEligibleDate    :
UpgradeScheduledDate : UserNotificationDate :
UpgradeDate          :
LastStateChangeDate  :

Bislang waren bei mir die Daten mit Ausnahme der TenandID und des Runspace immer leer.

Weitere Links