Lync Client Policies

Auf der Seite Lync Policies habe ich die verschiedenen Richtlinien von Lync aufgezählt. Die Lync Client Policies sind aber etwas besonders, da sie sehr viel umfangreicher sein können und zudem individuell erweitert werden können

Achtung: Beachten Sie die Reihenfolge auf Lync Provisioning

Standard Richtlinien

Bis auf die Client Richtlinien können Sie alle anderen Richtlinien über die grafische Verwaltung anlegen, ändern und löschen. Die Client Richtlinien übernehmen die Funktion, die früher über Gruppenrichtlinien an den Client durchgesetzt wurden. Da aber immer mehr Clients nicht mehr in der Domäne sind (z.B. beim Einsatz von Lync Online in der Cloud, Lync Telefone und Mobilfunkclients oder Private PCs zu Hause), kann Lync die Einstellungen als "Inband Provisioning" über SIP an den Client senden. Über entsprechende "Client Version Policies" können Sie dann sicherstellen, dass ältere Clients, die eine solche Steuerung nicht unterstützen, ausgesperrt werden. Die Konfiguration der Richtlinie erfolgt aber per PowerShell. Hier die Ausgabe der Default Richtlinie

[PS] C:\Get-CsClientPolicy
 
Identity                               : Global
PolicyEntry                            : {}
Description                            :
AddressBookAvailability                : WebSearchAndFileDownload
AttendantSafeTransfer                  :
AutoDiscoveryRetryInterval             :
BlockConversationFromFederatedContacts :
CalendarStatePublicationInterval       :
ConferenceIMIdleTimeout                :
CustomizedHelpURL                      :
CustomLinkInErrorMessages              :
CustomStateURL                         :
DGRefreshInterval                      :
DisableICE                             :
DisableCalendarPresence                :
DisableContactCardOrganizationTab      :
DisableEmailComparisonCheck            :
DisableEmoticons                       :
DisableFeedsTab                        :
DisableFederatedPromptDisplayName      :
DisableFreeBusyInfo                    :
DisableHandsetOnLockedMachine          :
DisableMeetingSubjectAndLocation       :
DisableHtmlIm                          :
DisableInkIM                           :
DisableOneNote12Integration            :
DisableOnlineContextualSearch          :
DisablePhonePresence                   :
DisablePICPromptDisplayName            :
DisablePoorDeviceWarnings              :
DisablePoorNetworkWarnings             :
DisablePresenceNote                    :
DisableRTFIM                           :
DisableSavingIM                        :
DisplayPhoto                           : AllPhotos
EnableAppearOffline                    :
EnableCallLogAutoArchiving             :
EnableClientMusicOnHold                : False
EnableConversationWindowTabs           :
EnableEnterpriseCustomizedHelp         :
EnableEventLogging                     :
EnableExchangeContactSync              : True
EnableExchangeDelegateSync             :
EnableFullScreenVideo                  :
EnableHotdesking                       :
EnableIMAutoArchiving                  :
EnableNotificationForNewSubscribers    :
EnableSQMData                          :
EnableTracing                          :
EnableURL                              :
EnableUnencryptedFileTransfer          :
EnableVOIPCallDefault                  : False
ExcludedContactFolders                 :
HotdeskingTimeout                      : 00:05:00
IMWarning                              :
MAPIPollInterval                       :
MaximumDGsAllowedInContactList         : 10
MaximumNumberOfContacts                :
MaxPhotoSizeKB                         : 30
MusicOnHoldAudioFile                   :
P2PAppSharingEncryption                : Supported
PlayAbbreviatedDialTone                :
SearchPrefixFlags                      :
ShowRecentContacts                     : True
ShowManagePrivacyRelationships         : False
ShowSharepointPhotoEditLink            : False
SPSearchInternalURL                    :
SPSearchExternalURL                    :
SPSearchCenterInternalURL              :
SPSearchCenterExternalURL              :
TabURL                                 :
WebServicePollInterval                 :

Sie sehen hier eine ganze Menge von Einstellungen, die nicht gesetzt (= default) sind und für jede Einstellungen gibt es auf der Microsoft Seite eine kurze Beschreibung.

Daher erspare ich mir die Auflistung der einzelnen sichtbaren Punkte.

Policy Scope

Sie können neben der "Global"-Policy noch Richtlinien auf der Ebene der "Site" und für Benutzer anlegen. für den Benutzer gilt effektiv dass die Richtlinie, die am nächsten an ihm dran ist, d.h. wen Sie ihm eine Benutzerrichtlinie vergeben haben, dann wirkt auch nur diese

Wenn dem Benutzer keine Richtlinie direkt zugewiesen wurde, dann wird eine eventuell vorhandene SITE-Policy angewendet und wenn diese nicht definiert ist, dann kommt die globale Richtlinie zum Tragen.

Es kann also immer nur genau eine GLOBAL-Policy geben, pro Site immer nur genau eine SITE-Policy aber durchaus mehrere Benutzer-Policies. Diese werden mit Grant-CSClientPolicy den Benutzer zugewiesen:

Policies auf dem Client

Die Polices ersetzen ja seit Lync 2010 die früheren Gruppenrichtlinien. Die Einstellungen werden nun "Inband" im SIP-Paket mit gesendet und angewendet. Dies kann per Snooper auf dem Server aber viel einfacher noch auf dem Client kontrolliert werden. Schalten Sie auf dem Client einfach das Logging ein und schauen Sie in %LOCALAPPDATA%\Microsoft\Office\15.0\Lync\Tracing\Lync-UccApi-0.UccApilog. Sie sollten die Anfrage des Clients sehen

INFO  :: SUBSCRIBE sip:frank.carius@netatwork.de SIP/2.0
From: <sip:User1@msxfaq.net>
To: <sip:User2@msxfaq.net>
CSeq: 1 SUBSCRIBE
Event: vnd-microsoft-provisioning-v2
Accept: application/vnd-microsoft-roaming-provisioning-v2+xml
Supported: com.microsoft.autoextend
Content-Type: application/vnd-microsoft-roaming-provisioning-v2+xml

<provisioningGroupList xmlns="http://schemas.microsoft.com/2006/09/sip/provisioninggrouplist" subnet="192.168.100.0">
  <provisioningGroup name="publicProviders"/>
  <provisioningGroup name="UserSetting"/>
  <provisioningGroup name="ServerConfiguration"/>
  <provisioningGroup name="groupChatConfiguration"/>
  <provisioningGroup name="locationPolicy"/>
  <provisioningGroup name="persistentChatConfiguration"/>
  <provisioningGroup name="mediaConfiguration"/>
  <provisioningGroup name="meetingPolicy"/>
  <provisioningGroup name="privacyPublicationGrammar"/>
  <provisioningGroup name="presencePolicyV2"/>
  <provisioningGroup name="ucPhoneSettings"/>
  <provisioningGroup name="ucPolicy"/>
  <provisioningGroup name="publicationGrammar"/>
  <provisioningGroup name="endpointConfiguration"/>
</provisioningGroupList>

Dieser "SUBSCRIBE" fordert vom Server die verschiedenen Provisioning-Groups an. Interessant ist hier dann die Antwort. Der Header ist noch recht einfach zu verstehen. Es ist ein "200 OK" auf den vorherigen "SUBSCRIBE". Hier habe ich aber nur den Teil der "endpointConfiguration" der XML-Antwort zitiert

SIP/2.0 200 OK
Contact: <sip:NAWLYNC001.netatwork.de:5061;transport=tls>
Content-Length: 53268
From: "Carius, Frank"<sip:frank.carius@netatwork.de>;tag=ecb1b080e7;epid=2385f4c267
To: <sip:frank.carius@netatwork.de>;tag=0A030080
CSeq: 1 SUBSCRIBE
Content-Type: application/vnd-microsoft-roaming-provisioning-v2+xml
Event: vnd-microsoft-provisioning-v2

<provisionGroupList xmlns="http://schemas.microsoft.com/2006/09/sip/provisiongrouplist-notification">
.....
	<provisionGroup name="endpointConfiguration" >
		<propertyEntryList >
			<property name="ShowRecentContacts" >true</property>
			<property name="ShowManagePrivacyRelationships" >false</property>
			<property name="MaxPhotoSizeKB" >30</property>
			<property name="DisableMusicOnHold" >false</property>
			<property name="MusicOnHoldAudioFile" >\\lyncfe\Ansagen\03_Warteschleife_mono_1.wma</property>
			<property name="PhotoUsage" >AllPhotos</property>
			<property name="AbsUsage" >WebSearchAndFileDownload</property>
			<property name="HotdeskingTimeout" >300</property>
			<property name="SPSearchInternalURL" >https://intranet.msxfaq.net/_vti_bin/search.asmx</property>
			<property name="SPSearchExternalURL" >https://intranet.msxfaq.net/_vti_bin/search.asmx</property>
			<property name="SPSearchCenterInternalURL" >https://intranet.msxfaq.net/Suche/Seiten/peopleresults.aspx</property>
			<property name="SPSearchCenterExternalURL" >https://intranet.msxfaq.net/Suche/Seiten/peopleresults.aspx</property>
			<property name="EnableExchangeDelegateSyncUp" >true</property>
			<property name="EnableContactSync" >true</property>
			<property name="ShowSharepointPhotoEditLink" >true</property>
			<property name="EnableVOIPCallDefault" >false</property>
			<property name="MaximumDGsAllowedInContactList" >10</property>
			<property name="P2PAppSharingEncryption" >0</property>
			<property name="EnableHighPerformanceP2PAppSharing" >false</property>
			<property name="EnableHighPerformanceConferencingAppSharing" >false</property>
			<property name="TracingLevel" >Light</property>
		</propertyEntryList>
	</provisionGroup>
</provisionGroupList>

Wer gerne eine komplette Version sehen will, kann gerne selbst mit Snooper oder dem Client Logging seine eigene Datei auslesen. Wer kein Lync hat, kann gerne folgende Musterantwort analysieren.

Beispiel XML einer SUBSCRIBE Antwort mit sehr vielen Client Einstellungen
lyncclientpolicies.txt

Custom Entries mit PolicyEntry

Wer sich genau die Client Policy angesehen hat, dem wird an der zweiten Zeile der Eintrag "PolicyEntry" aufgefallen sein, der per Default leer ist:

PS] C:\Get-CsClientPolicy
 
Identity                               : Global
PolicyEntry                            : {}
Description                            :
AddressBookAvailability                : WebSearchAndFileDownload
Attend...

Diese Einträge können Sie selbst füllen, z.B. mit folgendem Beispiel

# Neuer Policyeintrag vorbereiten
$CsPolicyEntry = New-CsClientPolicyEntry `
   -Name MSXFAQPolicy1 `
   -Value $true

# zu aendernde Policy holen
$currentClientPolicy=Get-CsClientPolicy -Identity Global

# Eintrag addieren
$currentClientPolicy.PolicyEntry.Add($CsPolicyEntry)

# Policy aktualisieren
Set-CsClientPolicy -Instance $currentClientPolicy

In der Antwort des Servers auf einen Provisioning Request steht dann:

03/03/2014|21:11:02.331 16B8:16D0 INFO  :: SIP/2.0 200 OKContact: <sip:NAWLYNC001.netatwork.de:5061;transport=tls;received=192.168.100.100;ms-received-cid=21AF601>From: "Carius, Frank"<sip:frank.carius@netatwork.de>;tag=c3fe6ea730;epid=2385f4c267To: <sip:frank.carius@netatwork.de>;tag=BE180080CSeq: 1 SUBSCRIBEContent-Type: application/vnd-microsoft-roaming-provisioning-v2+xmlEvent: vnd-microsoft-provisioning-v2
<provisionGroupList xmlns="http://schemas.microsoft.com/2006/09/sip/provisiongrouplist-notification">
   <provisionGroup name="endpointConfiguration" >
      <propertyEntryList >
         <property name="MSXFAQPolicy1" >True</property>
      </propertyEntryList>
   </provisionGroup>
</provisionGroupLis

Nun liegt es natürlich an dem Client diese Werte auch auszuwerten und sich danach zu richten. Folgende Werte habe ich bislang gesehen, die alle mit dem Wert "true" verbunden waren

Wert Beschreibung und Links

AllowAdalForNonLyncIndependentOfLync

EnableContactResolutionWithTelUriAndEmailOnly

Interessanterweise kann die gleiche Wirkung auch mit einem Eintrag in der lokalen Registrierung erzielt werden. Ich weiß aber nicht, ob das für andere Parameter ebenso funktioniert.

Action: Create
Hive: HKEY_CURRENT_User
Key path: Software\Policies\Microsoft\Office\16.0\Lync
Value name: EnableContactResolutionWithTelUriAndEmailOnly
Value type: REG_DWORD
Value data: 1
Base: Decimal

EnableTraceRouteReporting

Option um den Client dazu zu bringen einen Traceroute des Weg der Audio/Video-Daten zu machen.

# Vorbereiten des Policy-Eintrags
$Policyentry = New-CsClientPolicyEntry -Name "EnableTraceRouteReporting" -Value "TRUE" 
 
# Addieren des Eintrags an alle Client Policies
foreach ($Policy in get-csclientpolicy) {
   $policy = get-csclientpolicy -identity $Policy.identity
   $policy.PolicyEntry.Add($Policyentry)
   set-csclientpolicy -instance $policy
}
 
# Kontrolle
Get-CsClientPolicy | fl identity,pol*

EnablePresencePhotoOptions

Siehe nächstes Kapitel

Praktischer Einsatz: Lync Photo

Seit Lync 2013 werden die Bilder per Default im Exchange 2013 Postfach abgelegt. Mit Lync 2010 konnte der Anwender im Client immer noch eine URL hinterlegen. Das ist mit mit Lync 2013 seit dem Update November 2013 auch wieder möglich. Allerdings ist die Einstellung per Default nicht freigeschaltet und auch nicht per GUI oder andere Tricks erreichbar. Der Lync-Administrator muss dies auf dem Server über die Policy den Benutzer zuweisen. Hier die relevanten Befehle:

# Neuer Policyeintrag vorbereiten
$CsPolicyEntry = New-CsClientPolicyEntry `
   -Name EnablePresencePhotoOptions `
   -Value $true

# zu aendernde Policy holen
$currentClientPolicy=Get-CsClientPolicy -Identity Global

# Eintrag addieren
$currentClientPolicy.PolicyEntry.Add($CsPolicyEntry)

# Policy aktualisieren
Set-CsClientPolicy -Instance $currentClientPolicy

Und hier dann die Ansicht vorher:

Und nach der Anwendung der Richtlinie

Hier erscheint unten dann die Funktion eine URL zu hinterlegen und damit wieder auch externen Personen zuzuweisen.

Praktischer Einsatz: Snom

Ein zweiter Einsatz dieser "Custom Policies" können Sie bei SNOM-Telefonen sehen. Die SNOM-Firmware akzeptiert einige Parameter auch als Lync Policy.

Wir zu gegebener Zeit erweitert

Weitere Links