Lync PowerShell

Auch Microsoft Lync lässt sich per PowerShell wunderbar verwalten. Die meisten Einstellungen sind sogar nur über die PowerShell erreichbar und gar nicht per Lync Control Panel (Lync CSCP)

Lokale Lync PowerShell

Wenn Sie über den Lync Deployment Builder auf einem Computer die Lync Admin Tools installieren, bekommen Sie natürlich auch die Lync PowerShell mit installiert, die sich mit folgendem Aufruf im Startmenü verankert. (Zur besseren Lesbarkeit umgebrochen)

C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe 
  -noexit 
  -command "cd $env:UserProfile; 
            Import-Module 'C:\Program Files\Common Files\
            Microsoft Lync Server 2013\Modules\Lync\Lync.psd1'

Ein Blick in die PSD1-Datei zeigt neben der langen digitalen Signatur nur ganz wenig Code (zur Lesbarkeit umgebrochen):

@{
    GUID="b8499a8b-4b90-43b8-a27e-3c4e7b292c44"
    Author="Microsoft Corporation"
    CompanyName="Microsoft Corporation"
    Copyright="Copyright (c) Microsoft Corporation.  All rights reserved."
    ModuleVersion="5.0.0.0"
    Description="Microsoft Lync Server 2013" + " PowerShell Module"
    CLRVersion="2.0.50727"
    NestedModules="Microsoft.Rtc.Management","Microsoft.Rtc.Rgs.Management","init.ps1"
    RequiredAssemblies="Microsoft.Rtc.Management",
                       "Microsoft.Rtc.Management.Core",
                       "Microsoft.Rtc.Management.WritableConfig",
                       "Microsoft.Rtc.Rgs.Management",
                       "Microsoft.Rtc.Rgs.Data",
                       "Microsoft.Rtc.Management.Deployment"
    ScriptsToProcess=  "startup.ps1",
                       "BackcompatCmdlets.ps1",
                       "SetCsPinSendCAWelcomeMail.ps1"
    PowerShellVersion ="3.0"
    HelpInfoURI = "http://go.microsoft.com/fwlink/?LinkID=299660"
}

Es werden ein paar Assemblies eingeladen und dann drei Skripte eingebunden.

  • startup.ps1
    Initialisiert die PowerShell
  • BackcompatCmdlets.ps1
    Addiert ein paar Funktoinen, die beim Aufruf von früheren Commandlets eine Meldung, z.B. bei *-CsVacantNumber, die nun *-CsUnassignedNumber lauten
  • SetCsPinSendCAWelcomeMail.ps1
    Addiert die Funktion Set-CsPinSendCAWelcomeMail in der PowerShell, über die KonferenzPins erstellt und an die Benutzer per SMTP versendet werden können.

Ich habe bislang noch keine dieser zusätzlichen Funktionen wissentlich verwendet. Danach haben Sie aber alle Funktionen gemäß ihren Lync Verwaltungsrollen zur Verfügung.

Remote Lync PowerShell

Wie auch in Exchange lässt sich Lync aber auch von einem Computer ansteuern, der nur eine PowerShell installiert hat. Es ist daher nicht erforderlich die komplette Lync Admin Umgebung zu installieren. Hier ein Beispielcode:

# Angabe expliziter Credentials
$cred = Get-Credential "ExampleDomain\Lync_Administrator"
$session = New-PSSession `
    -ConnectionURI "https://LyncServer/OcsPowerShell" `
    -Credential $cred
Import-PsSession $session

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

Wenn die Lync PowerShell z.B. per HTTPS aus dem Internet erreichbar ist, können Sie so auch den Server verwalten.

Skype for Business Online PowerShell

Genau dies ist mit Office 365 manchmal erforderlich. Seit Aug 2013 gibt es nun auch die PowerShell-Module zum Download, um von einem internen System per HTTPS auch per Skript die Konfiguration vornehmen zu können.

Skype for Business Online, Windows PowerShell Module
http://www.microsoft.com/en-us/download/details.aspx?id=39366

Hier scheint aber eine einfache "Remote Verbindung" nicht möglich zu sein. Der Versuch mit folgendem Code und passenden Anmeldedaten wurde mit einem Fehler quittiert.

# Das geht leider nicht
$session = New-PSSession `
    -ConnectionURI "https://webdir0d.litwareinc.com/OcsPowerShellLiveId" `
    -Credential $cred

Insofern macht der Code im Downloadpaket wohl doch noch das ein oder andere zusätzlich. Daher muss man für die Verwaltung von Lync Online einfach eine "normale" PowerShell starten und dann folgendes ausführen:

# Zuerst gültige Office 365 Anmeldedaten eingeben
$credential = Get-Credential

# Verbindung zu Office 365 herstellen
$session = New-CsOnlineSession -Credential $credential -verbose

# Session in die aktuelle Umgebung importren
Import-PSSession $session -AllowClobber

# Test ob alles erfolgreich war. Die Funktion "get-cstenant" ist 
# erst verfügbar, wenn die Session erfolgreich importiert wurde.
get-cstenant


# Am ende sollten Sie die Session natürlich wieder sauber abbauen
Remove-PSSession $session

OCS und PowerShell

OCS 2007 nutzt bislang LDAP und WMI, um alle Verwaltungstätigkeiten durchzuführen und bietet keine direkte PowerShell Unterstützung über Commandlets an. OCS 2007 R2 soll dies ändern. Aber es gibt Erweiterungen und Ergänzungen durch die Community.

Weitere Links