Client Version Filter
Lync Server sind per SIP erreichbar, leider nicht für jeden SIP-Client das Lync ein paar Besonderheiten und Erweiterungen nutzt, so dass ein klassisches SIP-Telefone nicht damit zurecht kommt. Aber auch unter der Liste von möglichen Clients gibt es welche, die ein Administrator nicht haben will. Das können Sicherheitsgründe sein, z.B.: weil alte Versionen bestimmte Einstellungen noch nicht unterstützen (z.B. Call Admission Control) oder andere Clients vielleicht "zu neu" oder einfach verboten sind.
Für diesen Einsatzzweck bieten sich die Client Version filter an, die schon OCS kannte auch in Lync weiter vorhandensind.
Clienttypen
Im Laufe der Zeit haben sich einige Clients angesammelt, die sich mit einem passenden "UserAgent"-Eintrag mit Versionsangabe beim Server melden. Der Lync Server prüft die Einstellung gegen ein Regel Regelwerk und lässt den Anwender dann entsprechend zu oder eben nicht.
Kürzel | Software |
---|---|
LCC |
Microsoft Office Communicator 2005 instant messaging client |
RTC |
Real-Time Communications instant messaging client |
RTCC |
Real-Time Communications and Collaboration client |
UCCP |
Unified Communications Client Platform client |
OC |
Office
Communicator
2007 instant
messaging client |
WM |
Windows Messenger instant messaging client |
CWA |
Microsoft Office Communicator Web Access instant messaging client |
COMO |
Microsoft Office Communicator Mobile instant messaging client |
LMC |
Office Live Meeting client |
AOC |
Attendee |
CPE |
Communicator Phone Edition |
LiveMeetingAddIn |
LiveMeetingAddIn |
Seit LCS 2003 haben sich also eine Menge von Clients entwickelt, die alle theoretisch auftreten können. Nicht alle unterstützen aber die Funktionen jeder Server Version korrekt und einige können sogar schaden, z. B. die Buddy-Liste unbrauchbar machen.
Client Policy
Per Default installieren OCS einen Client Version Filter und Lync eine Client Version Policy. Im Gegensatz zur globalen Wirkung der OCS Einstellung sind die Policies von Lync Global aber auch pro Site und User anwendbar.
Mit der Anwendung der Client Version Policy auf den einzelnen Benutzer können Sie sowohl die generelle Funktion ihrer Filter an einem Test-Account prüfen als auch die Benutzung bestimmter Client für Konten unterbinden.
Hier einmal die "Default" für einen OCS 2007 R2 Server, wenn jemand diese noch haben sollte:
In dem Dialog werden sowohl die Filter als auch das Default-Verhalten konfiguriert.
Etwas anders sieht es in Lync aus. Hier können Sie verschiedene Policies definieren. Neben der "global"-Policy können Sie weitere Richtlinien auf die Site, den Pool oder für die Anwendung auf Benutzer einrichten. Die Default für eine Lync 2013 Policy sehen Sie hier:
Die gleichen Einstellungen können Sie natürlich per PowerShell ermitteln.
PS C:\> (Get-CsClientVersionPolicy global).rules | ft Useragent,majorversion,Min orversion,buildnumber,qfenumber,compareop,action -AutoSize UserAgent MajorVersion MinorVersion BuildNumber QfeNumber CompareOp Action --------- ------------ ------------ ----------- --------- --------- ------ RTC 1 2 LEQ Block WM 5 LEQ Block OC 2 0 6362 97 LSS Block OC 2 9999 9999 9999 LEQ Allow OC 3 5 6907 83 LEQ Block UCCP 2 0 5999 LEQ Block CPE 2 0 6021 LEQ Block OCPhone 1 0 196 LEQ Block AOC 4 LSS Block
Wenn Sie sich die Liste genau anschauen, dann finden Sie hier kein "Allow" für O>C Clients die neuer sind. Die Einstellung, wie diese Regeln per Default wirken, werden an einer anderen Stelle gemacht.
Unter der "Client Version Configuration" können Sie global oder pro Site einstellen, ob überhaupt kontrolliert wird und welche "Default Action" ansteht, wenn die Regel keine Aussage trifft.
Auch diese Einstellung kann per PowerShell ermittelt und auch gesetzt werden
PS C:\> Get-CsClientVersionConfiguration Identity : Global DefaultAction : Allow DefaultURL : Enabled : True
- Bereitstellungshandbuch für Microsoft Lync Server
2010-Client und -Geräte
http://www.microsoft.com/de-de/download/details.aspx?id=15985
Clients ermitteln
In OCS 2007 konnte man noch einfach per GUI oder WMI ermitteln, welche Clients und User gerade angemeldet sind. In Lync gibt es aktuell kein Commandlet dazu und auch eine WMI-Abfrage läuft ins leere. Die Lync Performance Counter liefern auch nicht mehr Daten. Da bleibt dann letztlich nur der Blick in die SQL-Datenbank selbst.
Hinweis
Der direkte "lesende" Blick in die Datenbank ist unkritisch, solange sie wirklich nicht
schreiben. Allerdings "sieht" man so nur die
Clients, die aktuell angemeldet sind und hat
damit kein vollständiges "Inventory". Zudem muss
man die Datenbanken aus der RTCLOCAL-Instanz der
Frontend Server abfragen.
USE rtcdyn SELECT COUNT(*) as Occurrences, CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as varchar(100)) as 'Client Version' from rtcdyn.dbo.RegistrarEndpoint WHERE IsServerSource = 0 group by CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as varchar(100)) order by CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as varchar(100))
Diese Abfrage liefert die Versionen der Endpunkte und die Anzahl des Auftretens.
write-host "Reading SIP-Versions from SQL"
[string]$SQLConnection = "Server=NAWLYNC001\RTCLOCAL;Integrated
Security=True"
[string]$SQLQuery = "USE rtcdyn
SELECT COUNT(*) as Occurrences,
CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as
varchar(100)) as 'Client Version'
from rtcdyn.dbo.RegistrarEndpoint
WHERE IsServerSource = 0
group by CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp
as varchar(100))
order by CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp
as varchar(100))"
$SqlAdapter = New-Object
System.Data.SqlClient.SqlDataAdapter ($SQLQuery,$SQLConnection)
$DataSet = New-Object System.Data.DataSet
$result = $SqlAdapter.Fill($DataSet)
if ($result -eq 0) {
write-error "Keine SQL-Daten erhalten"
}
else {
write-host " erhaltene Zeilen: $result"
$DataSet.Tables[0] | ft -autosize
}
# Ausgabe
Occurrences Client Version
----------- --------------
3 CPE/4.0.7577.4387
OCPhone/4.0.7577.4387 (Microsoft Lync Phone
Edition)
2 UCCAPI/15.0.4517.1004
OC/15.0.4517.1004 (Microsoft Lync)
2 UCCAPI/15.0.4517.1504
OC/15.0.4517.1504 (Microsoft Lync)
Wer nun noch wissen möchte, welche SIP-Adresse sich dahinter verbirgt, kann folgende Anfrage nutzen:
SELECT rtc.dbo.Resource.UserAtHost as 'SIP Address', CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as varchar(100)) as 'Client Version' FROM rtcdyn.dbo.RegistrarEndpoint INNER JOIN rtc.dbo.Resource ON rtcdyn.dbo.RegistrarEndpoint.OwnerId = rtc.dbo.Resource.ResourceId WHERE IsServerSource = 0
Als PowerShell -Skript ist dies dann
write-host "Reading SIP-User
from SQL"
[string]$SQLConnection = "Server=NAWLYNC001\RTCLOCAL;Integrated
Security=True"
[string]$SQLQuery = "SELECT
rtc.dbo.Resource.UserAtHost as 'SIP Address',
CAST(rtcdyn.dbo.RegistrarEndpoint.ClientApp as
varchar(100)) as 'Client Version'
FROM rtcdyn.dbo.RegistrarEndpoint
INNER JOIN rtc.dbo.Resource
ON rtcdyn.dbo.RegistrarEndpoint.OwnerId =
rtc.dbo.Resource.ResourceId
WHERE IsServerSource = 0"
$SqlAdapter = New-Object
System.Data.SqlClient.SqlDataAdapter ($SQLQuery,$SQLConnection)
$DataSet = New-Object System.Data.DataSet
$result = $SqlAdapter.Fill($DataSet)
if ($result -eq 0) {
write-error "Keine SQL-Daten erhalten"
}
else {
write-host " erhaltene Zeilen: $result"
$DataSet.Tables[0] | ft -autosize
}
# Ausgabe zeigt aber nur einen Endpunkt pro
Benutzer
SIP Address
Client Version
-----------
--------------
User1@msxfaq.net UCCAPI/15.0.4517.1504
OC/15.0.4517.1504 (Microsoft Lync)
User2@msxfaq.net CPE/4.0.7577.4387 OCPhone/4.0.7577.4387
(Microsoft Lync Phone Edition)
User3@msxfaq.net UCCAPI/15.0.4517.1004
OC/15.0.4517.1004 (Microsoft Lync)
User4@msxfaq.net UCCAPI/15.0.4517.1504
OC/15.0.4517.1504 (Microsoft Lync)
User5@msxfaq.net CPE/4.0.7577.4387 OCPhone/4.0.7577.4387
(Microsoft Lync Phone Edition)
Die Abfragen sind natürlich je Frontend Server erforderlich, um eine komplette Liste zu erhalten
- How to Get a List of Client
Versions and the Users Logged
into Them
http://blogs.technet.com/b/dodeitte/archive/2011/06/15/how-to-get-a-list-of-client-versions-and-the-Users-logged-into-them.aspx - DbDataAdapter.Fill-Methode (DataSet)
http://msdn.microsoft.com/de-de/library/zxkb3c3d.aspx
Weitere Links
- OCS2007: Configuring Client
Version Filtering
http://technet.microsoft.com/en-us/library/bb936607(v=office.12).aspx - OCS-to-PowerShell Mapping:
Managing Client Versions
http://blogs.technet.com/b/csps/p/ocsmap23.aspx - Lync Server Admin Guide:
Filtering Instant Messages and
Client Versions
http://blogs.technet.com/b/nexthop/archive/2011/07/13/agfilteringimandclient.aspx - Specifying the Client
Applications That Can Be used to
Log On to Lync Server 2013
http://technet.microsoft.com/en-us/library/gg182591.aspx - OCS 2007 Client Version
Filtering
http://blog.insideocs.com/2009/02/09/ocs-2007-client-version-filtering/ - Configure Clients für Migration
http://technet.microsoft.com/en-us/library/gg398702(v=ocs.14).aspx