Lync User Provisioning

Über das Lync Control Panel (Lync CSCP) lassen sich recht einfach die Benutzer verwalten, zumindest wenn es nur wenige Benutzer und gelegentliche Änderungen sind. Wird Lync in größeren Umgebungen eingesetzt, dann ist ein automatisches Provisioning der Benutzer gefordert, was über die Lync PowerShell sehr einfach möglich ist. Damit kann die Integration in einen Verzeichnisabgleich (FIM, DirX o.ä.) erfolgen. Sie können aber auch z.B. eine CSV-Datei als Datenquelle verwenden.

Grundlagen zu Lync

Die Verwaltung von Lync Objekten darf nur per PowerShell oder CSCP erfolgen. Jede direkte Änderung der Felder am AD ist zwar technisch möglich aber von Microsoft nicht unterstützt. Während es bei Exchange aber immer noch ein "Heilungs-Commandlet" in Form von "Update-User" gibt, ist dies bei Lync nicht vorhanden. Bitte ändern sie daher nicht direkt per ADSIEDIT oder LDAP die Objekte im Active Directory. Aber dann ist es ganz einfach mit einem PowerShell-Script:

  1. Verbindung mit der Lync PowerShell herstellen.
    Das ist der sauberste Weg, d.h. Sie benötigen auf dem Management PC nur eine PowerShell aber keine Lync Tools installieren. Zudem muss dieser Management-PC sich per HTTP/HTTPS zum Lync Server verbinden.
  2. Objekt mit Domain Controller suchen
    Es bietet sich an mit get-CSADUser sich den User erst einmal zu suchen und davon den "Originating-Server" zu speichern um alle folgende Befehle gegen den gleichen DC auszuführen-
  3. Den Benutzer mit Enable-CSUser aktivieren oder mit  Disabled-CSUser deaktiviert
    Damit wird er erst mal mi den Standardpolicies und einer SIP-Adresse auf einem Pool versehen. Aber viel mehr kann mit "Enable-CSUser" nicht gesetzt werden
  4. Einstellungen setzen
    Einige Einstellungen werden dann mit Set-CSUser gesetzt, z.B. die Rufnummer und die Audio/Video-Rechte. Achten Sie darauf, dass dabei der gleiche DC genutzt wird, sonst findet das Commandlet den vorher gerade aktivierten Benutzer eventuell nicht
  5. Die Polices zuweisen
    Zuletzt kommen dann die verschiedenen Policies, wenn Sie von den globalen Richtlinien abweichen. Achten Sie darauf, dass dabei der gleiche DC genutzt wird, sonst findet das Commandlet den vorher gerade aktivierten Benutzer eventuell nicht.

Dann müssen sie warten, bis der Lync User Replicator die Daten aus dem AD in die Lync Datenbank übertragen hat. 

Lync PowerShell verbinden

Auch wenn ich das auf Lync PowerShell schon beschrieben habe, poste ich hier noch mal die wenigen Zeilen, wie sie sich die Lync Commandlets auf den lokalen PC holen:

# Angabe expliziter Credentials
$cred = Get-Credential "ExampleDomain\Lync_Administrator"

$session = New-PSSession `
    -ConnectionURI "https://LyncServer/OcsPowerShell" `
    -Credential $cred
Import-PsSession $session

# ODER Nutzung der lokalen Anmeldedaten
$session = New-PSSession `
    -ConnectionURI "https://LyncServer/OcsPowerShell" `
    -Authentication negotiatewithimplicitcredential
Import-PsSession $session

Danach sollten sie, abhängig von den zugewiesenen Lync Rollen (Lync RBAC), schon die ersten Commandlets verwenden können.

Objekt und Domaincontroller suchen

Wenn ich mit Objekten im AD arbeite, dann versuche ich diese zuerst einmal zu finden. Die Lync PowerShell hat dazu eigenes ein Commandlet "Get-CSADUser", welches alle AD-User ansprechen kann, auch die noch nicht für Lync aktiviert sind. Sie können das Skript problemlos auch per LDAP-Filter, OU-Angaben, Wildcards etc. zur Auflistung mehrerer Objekte verwenden. Ich verwende es in dem Beispiel zur Provisioning eines einzelnen Users mit der Identity. Hier akzeptiert das Commandlet vier Werte in der folgenden Reihenfolge

  1. SIP-Adresse des Benutzers
  2. UPN (Benutzerprinzipalname) des Benutzers
  3. Domänen- und Anmeldename des Benutzers (mit dem Format "Domäne\Anmeldename")
  4. Active Directory-Anzeigename des Benutzers (z. B. "Frank Carius"
  5. Active Directory-Distinguished Name (DN) des Benutzers

Wenn der Benutzer noch keine SIP-Adresse hat, dann ist der UPN oder DN eine gutes eindeutiges Merkmal genau ein Objekt zu erhalten. Ehe ich also einen Benutzer für Lync aktiviere, ist eine solche Suche ratsam:

Get-CSAdUser -identity User@lynclan.local | fl sipaddress,originatingserver

sipaddress        : sip:test@lynclab.local
originatingserver : DC.lynclab.local

Den DC sollten Sie sich merken, denn in der Folge werden sie immer wieder per PowerShell Einstellungen vornehmen. Da aber eine AD-Replikation durchaus etwas länger dauern kann, sollte man den DC zur Konfiguration angeben.

Objekt aktivieren

Wer nicht weiß, ob das Objekt schon aktiviert ist, kann mit einem Get-CSUser vorher danach suchen. Ansonsten können Sie natürlich auch stumpf mit einem Enable-CSUser ein Objekt mit den Properties versehen. Die wichtigen Parameter dabei sind:

  1. Identity
    Wie bei Get-CSADUser können Sie hier eine der fünf Werte verwenden.
  2. SIP-Adresse
    Diese kann direkt angegeben werden oder mit einem anderen Parameter aus bestehenden Feldern (z.B. UPN oder EMailAddress) generiert werden
  3. RegistrarPool
    Die Angabe des Pools, auf dem der Benutzer angelegt werden soll, ist verpflichtend.

Achtung:
Wenn Sie per Enable-CSUser einen bestehenden User mit anderen Werten versehen, wird z.B. die SIP-Adresse ohne Rückfrage auch geändert.

Damit ist der Benutzer unter Verwendung

Disable-CSUser löscht den Benutzer komplett aus Lync aber nicht aus dem AD. Wenn Sie einen Benutzer nur temporär sperren wollten, dann reicht es aber nicht das AD-Konto zu deaktivieren, da sich Lync Clients per Zertifikat anmelden. Dann ist ein "Set-CSUser -enabled $false" der richtige weg.

Werte mit Set-CSUser eintragen

Sie haben schon gesehen, das Sie mit Enable-CSUser nicht allzu viel einstellen können. Vor allem die Rufnummern und die Voice-Berechtigungen sind darüber nicht einzutragen. Daher sind nachfolgende Parametrisierungen erforderlich. Der erste die die Steuerung mittels Set-CSUser und entsprechender Parameter.

  • DomainController
    Wenn sie mehrere Domaincontroller haben, dann sollten Sie immer den gleichen DC für die folgenden Befehle nutzen. Ansonsten besteht das Risiko, dass die Befehle nicht wie erwartet funktionieren.

Funktionsumfang, Audio/Video

Der erste Parameterblock betrifft die Steuerung, ob der Anwender Audio/Video verwenden darf oder nicht, ob er auch Telefonie erhält oder ein Telefon per "Remote Control" steuert. Das ist leider nicht ein einzelner Parameter, sondern eine Kombination mehrerer Parameter, die auf $true bzw. $false gesetzt werden. Im Lync Contol Panel finden Sie verschiedene Optionen, die aber nicht in einem Feld hinterlegt sind, sondern sich auf mehrere Felder verteilen:

Die Einstellung findet sich als Kombination der folgenden drei Parameter wieder:

  • AudioVideoDisabled
  • EnterpriseVoiceEnabled
  • RemoteCallControlTelephonyEnabled

Als Tabelle ergibt dies:

Telephony Mode AudioVideoDisabled EnterpriseVoiceEnabled RemoteCallControlTelephonyEnabled

Audio/Video disabled

$True

$False

$False

PC zu PC Only

$False

$False

$False

Enterprise Voice

$False

$True

$False

Remote Call Control

$False

$False

$True

Remote Call Control Only

$True

$False

$True

Andere Kombinationen haben ich bislang nicht gesehen und machen auch nicht viel Sinn. Sie sollten beim Set-CSUser bei einer Änderung alle Felder richtig setzen. Wenn Sie z.B.: aus einem User ohne Audio/Video einen Telefonie-User machen sollen, dann reicht es nicht den Parameter "EnterpriseVoiceEnabled =$True" zu setzen. Das Commandlet wirft einen Fehler.

Wenn Sie mit einem "Get-CSUser" die aktuellen Einstellungen anzeigen wollen, zeigt er per Default nicht alle Parameter mit an. Ein "| fl *" liefert alle Daten. Abhängig von den Einstellungen sind weitere Felder über das Commandlet zu setzen:

  • SipAddress
    Es ist ganz einfach damit die SIP-Adresse eines Anwenders zu ändern.
  • LineURI
    Dieses Feld enthält die Rufnummer des Teilnehmers. Es ist NICHT mit dem Feld "Telephone-Number" im AD zu verwechseln, welches z.B. auch in den Outlook Eigenschaften oder der Kontaktkarte angezeigt wird. Dies ist das maßgebliche Feld für das Routing von Anrufen zu dem Anwender und wird auch beim Reverse Name Lookup genutzt.
    Diese Nummer ist nicht nur für "Enterprise Voice"-User interessant. Auch wer "Audio/Video disabled" hat, sollte hier dann die Telefonnummer des alten Tischapparats haben. Beim Join in eine Konferenz bietet Lync dann den Rückruf auf diese Nummer an und bei der Einwahl mit der Rufnummer wird der Name des Benutzers in der Teilnehmerliste angezeigt
  • PrivateLine
    Dies ist eine zweite Rufnummer, die dem Anwender zugewiesen wird und als "Private Call" gemeldet werden kann. Richtig "Privat" ist die Nummer natürlich nicht, da sie im AD hinterlegt ist und jeder Domänenbenutzer diese per LDAP lesen könnte.
  • LineServerURI
    Dieses Feld kommt mit RemoteCallControl zum Einsatz.

Zusätzlich gibt es noch weitere Parameter, die in der Onlinehilfe beschrieben sind und ich hier nicht weiter ausführe.

  1. Enabled
  2. ExchangeArchivingPolicy
  3. ACPInfo
  4. HostedVoiceMail

Policies zuweisen

Im Lync Control Panel sind noch einige weitere DropDown-Listen für die verschiedenen Policies aufgeführt, deren genauere Bedeutung auf Lync Clientpolicies und Lync Policies beschrieben ist. Diese Konfiguration kann natürlich auch per PowerShell erfolgen. Dazu gibt es eine ganze Menge von "Grant-CS*"-Commandlets, die alle mit dem Parameter "Identity" das Objekt bestimmen und mit "-Policyname" den Namen der zuzuweisenden Richtlinie enthalten. Die ähnlichen Commandlets, die mit einem "SET-CS*" beginnen dienen zur Konfiguration der Policies selbst.

Damit haben Sie nun das Handwerkszeug um einen Benutzer erst zu aktivieren, dann die Einstellungen vorzunehmen und letztendlich die Policies zuzuweisen.

Benutzer deaktivieren

Das einzige, was Sie nun noch im Hinterkopf haben sollten ist das "Deaktivieren" oder "Deprovisionieren" eines Benutzers. Hier gibt es verschiedene Optionen:

  • Benutzer komplett löschen
    Wenn Sie einen AD-Benutzer einfach löschen, dann verschwindet der durch den Lync User Replicator nach kurzer Zeit aus der Lync-Datenbank. In Lync müssen Sie dazu keine weiteren Befehle verwenden. Durch das Löschen das AD-Kontos werden auch alle Lync Properties im AD entfernt. Sie sollten nur sicherstellt, dass der User Replikator diese "Delete"-Objekte auch findet, d.h. die durch das Setup vergebenen Rechte nicht verändert wurden und keine Vererbungen auf OUs unterbrochen wurden. Sollte das sein, dann finden Sie im Eventlog entsprechende Fehler, wenn Sie denn dort auch nachschauen.
  • Benutzer im AD deaktivieren
    Wenn Sie aber auch den Zwischenschritt "deaktivieren" nutzen, d.h. ein Benutzerkonto nicht sofort löschen sondern z.B. im AD erst deaktivieren und erst nach einer Karenzzeit wirklich löschen, dann werden Sie feststellen, dass ein im AD deaktiviertes Konto sich weiter an Lync anmelden kann. Das liegt an der Anmeldung mittels Zertifikaten, die ja weiterhin gültig sind. Lync fragt in dem Falle also gar nicht weiter "nach hinten" den Domain Controller. Das hat durchaus Vorteile, z.B. dass der Anwender weiterhin "telefonieren" kann, auch wenn das AD-Konto durch viele Fehlversuche (Stichwort DoS) gesperrt wäre. In dem Fall sollten Sie mit dem Sperren des Kontos auch in Lync das Konto sperren.
  • Benutzer in Lync Löschen
    Sie können den Benutzer natürlich auch einfach die Lync Funktionen wegnehmen, analog wie sie einem Benutzer für Exchange "deaktivieren" können. Der Weg ist die erste Wahl, wenn der Benutzer einfach kein Lync mehr nutzen soll, aber weiterhin ein aktives AD-Konto behalten muss

Damit ist auch die Information vorhanden, was der unterschied zwischen den verschiedenen Befehlen ist.

  • Disable-CSUser
    https://technet.microsoft.com/en-us/library/gg398747.aspx
    Damit wird der Benutzer aus Lync gelöscht, d.h. er hat gar keine Lync Funktionen mehr. Die AD-Felder werden entfernt. Das AD-Konto bleibt allerdings bestehen und auch aktiv. Der Anwender kann also weiterhin z.B.: Exchange und Dateidienste nutzen und sich an Client anmelden.
  • Set-CSUser -enabled:$False
    https://technet.microsoft.com/en-us/library/gg398510.aspx
    Damit wird der Benutzer für die Anmeldung an Lync temporär "gesperrt". Er wird also abgemeldet, kann sich nicht mehr weiter anmelden aber die Meetings und auch seine Buddy-Liste bleibt erhalten. Der Benutzer kann sehr schnell wieder reaktiviert werden. Die Präsenz in dieser Zeit ist natürlich "Offline".
  • Revoke-CsClientCertificate
    https://technet.microsoft.com/en-us/library/gg425748.aspx
    Mit diesem Befehl können Sie die auf dem Lync Server gespeicherten Clientzertifikate ungültig machen. Alle Clients müssen sich das nächste mal neu anmelden. Auch wenn Lync kein echtes "Device Management" hat, also Kein "RemoteWipe" oder "Quarantäne" unterstützt, kann man so z.B.: Geräte aussperren und den Endanwender zu einer einmaligen Neuanmeldung zwingen. Ungenutzte Geräte fallen so dann weg.

Solche Änderungen werden im AD durchgeführt aber nach kurzer Zeit durch den Lync User Replicator in die Datenbanken übernommen und dann auch umgehend umgesetzt. Endpunkte werden also auch aktiv abgemeldet. Allerdings kann es durchaus sein, dass bestehende Audio-Verbindungen weiter aktiv bleiben.

Alle Befehle haben ihren individuellen Einsatzbereich. Hier müssen Sie selbst heraus finden, welche Befehle Sie zu welcher Phase einbinden müssen.

Weitere Links