Announcing the Pomodoro Windows app

August 2017 MVP Jan Egil Ring and I launched an open source PowerShell based Pomodoro timer. This is a great way to get stuff done, but difficult to get started with. Andreas Kang Schøyen over at Lillevik IT has done something about that and created an executable program that sets up the integrations and timer.

How it works

When downloading and installing the app, it will automatically integrate with your Skype for Business 32 bit application and your Windows OS making it capable to:

  • Set you to “do not disturb” in Skype for Business with a custom presence state called Pomodoro Sprint
    • The app cotains the SDK dll’s for the Skype for Business client, so no extra installs to control presence
  • Write a note of your choosing during the the Pomodoro sprint and adding the time when you will be available
    • It even counts down the last 15 seconds, so that people waiting to reach you that you are about to become available
  • Write a note of your choosing after the Pomodoro sprint is complete
  • Set your computer in to presentation mode which suppresses popups
  • Start your favourite Spotify playlist for productivity
  • Make you available again when the sprint is finished

The app supports automatic updates and the roadmap includes IFTTT ingration so that you can mute your phone during the pomodoro sprint. See full roadmap here

PomodoroV2

The goal is to induce the flow state in a busy workday

Multitasking is a myth. The goal is to reach the flow state by focusing on one task at a time. Have you ever started writing an email, thought you sent it and eagerly waiting for a response, only to find it incomplete and unsent at the end of the day? This is one of the perils of multitasking.

The Pomodoro Technique is a great methodology to induce flow in a busy workday. It is all about avoiding distractions for 15-25 minutes and focus on one task at a time. This is a short enough period in the day that you can squeeze it in before a meeting. It is incredible what you can get done 15-25 minutes. The goal is to not get distracted and it takes about 7 minutes of focus before your reach your flow state.

If you want to succeed with Pomodoro, you need to make yourself unavailable. Equally important, you need to make yourself available again when those 25 minutes have passed. That is why we created the Pomodoro PowerShell tool, and why I love the simplicity of this app.

Read more and download the exe and MSI version of the app here: http://pomodoro.lit.no

Watch an outtake from my session at Microsoft Ignite 2017 on singletasking

Learn more on my thinking around singletasking and tools available to succeed with the flow state, from this outtake of my OneNote LifeHacks talk at Microsoft Ignite 2017

Complete lists of your tasks is key to success

An important part of succeeding with the Pomodoro Technique is lists. Lists enables you to choose the task that lifts the most weight off your shoulders at that point in time. I use OneNote to capture all my ideas and actions, enabling me to create that finite list of tasks. Check out how I do it in my OneNote LifeHacks YouTube series

How to connect to Exchange Online PowerShell via ISE with MFA the correct way

I had the issue that my ISE client timed out after 10 minutes and I could not re-logon to Exchange Online PowerShell and I had to start a new session each time. I asked on Twitter and got some great help from these guys, a big shout out to

It turned out I was doing it wrong. Here is how to do it right

  • Install the Exchange online PowerShell module for MFA
    • Go to Exchange Admin in portal.office.com
    • go to Hybrid and click download for the Exchange module
    • This will break in Chrome, so use Edge og IE
    • Note that you should run the installed module from time to time in order keep it up to date
  • Open PowerShell ISE or Visual Studio Code and use this code to connect to Exchange Online
#Import the module, requires that you are administrator and are able to run the script
Import-Module $((Get-ChildItem -Path $($env:LOCALAPPDATA+"\Apps\2.0\") -Filter CreateExoPSSession.ps1 -Recurse ).FullName | Select-Object -Last 1)
#connect specifying username, if you already have authenticated to another moduel, you actually do not have to authenticate
Connect-EXOPSSession -UserPrincipalName admin@contoso.com
#This will make sure when you need to reauthenticate after 1 hour that it uses existing token and you don't have to write password and stuff
$global:UserPrincipalName="admin@contoso.com"

How I create Microsoft Teams in PowerShell, January 2018

This is how I choose to create Microsoft Teams using PowerShell in the period of January 2018 as demoed in my NICconf session. This will probably change in the future so I need to specify the time this actually worked for me :)

  • I create the Office 365 Group in Exchange because then I can specify the email address and I also like to remove it from global addressbook since it is primarily used for Microsoft Teams
  • Then I Teams enable the group and typically it is created for projects so I create typical channels I want to use in the project, typically it is an Office 365 migration and deployment projects
  • Typically I leave it up to the group owners to add the members themselves in Microsoft Teams, but I use Teams PowerShell to add the owners and optionally members, because it is simpler to do it using Teams
  • The Microsoft Teams PowerShell module is based on Microsoft Graph and everything is in the context of your admin account, so in order to administer the Teams, you need to be an owner of those Teams
  • Be aware of that it can take up to 24 hours until members and channels are added to the Microsoft Teams because this is Microsoft Graph and the SLA is 24 hours to sync members over from Azure AD. Typically this should happen within 15 minutes
    • This is how it is as of January 2018
#Create the Office 365 Group
New-UnifiedGroup –DisplayName NICDemo96 –Alias NICDemo96 –EmailAddresses "NICDemo96@M365x963508.onmicrosoft.com" -owner GA-sha256@M365x963508.onmicrosoft.com -RequireSenderAuthenticationEnabled $False -Verbose
#This is optional, but may be a good practice initially since Office 365 Groups may clutter your Global Addressbook
Set-UnifiedGroup –Identity NICDemo96 –HiddenFromAddressListsEnabled $true
#Create the Team, provide the GUID object ID to specify the Group
$group = New-Team -Group (Get-UnifiedGroup NICDemo96).ExternalDirectoryObjectId -Verbose

#Check your Teams, will only list teams you are a member of
Get-Team

#Add Channels to the Team
New-TeamChannel -GroupId $group.GroupId -DisplayName "1 Adoption" -Verbose
New-TeamChannel -GroupId $group.GroupId -DisplayName "2 Deployment" -Verbose
New-TeamChannel -GroupId $group.GroupId -DisplayName "3 Operations" -Verbose
New-TeamChannel -GroupId $group.GroupId -DisplayName "4 Change Management" -Verbose
Set-TeamFunSettings -GroupId $group.GroupId -AllowCustomMemes true -Verbose

#add owners and members, easier to do with Teams cmdlet
$Owners = "PradeepG@M365x963508.onmicrosoft.com","PattiF@M365x963508.onmicrosoft.com","LidiaH@M365x963508.onmicrosoft.com","MiriamG@M365x963508.onmicrosoft.com"
$Users = "IrvinS@M365x963508.onmicrosoft.com","JohannaL@M365x963508.onmicrosoft.com","DebraB@M365x963508.onmicrosoft.com"
ForEach ($Owner in $Owners){Add-TeamUser -GroupId $group.GroupId -User $Owner -Role Owner}
ForEach ($User in $Users){Add-TeamUser -GroupId $group.GroupId -User $User -Role Member -Verbose}

#Check that members are added, know that it could take up to 24 hours until they are actually added to Microsoft Teams
Get-TeamUser -GroupId $group.GroupId
Get-UnifiedGroupLinks NICDemo96 -LinkType owner
Get-UnifiedGroupLinks NICDemo96 -LinkType member

If you want an updated approach, you should check out the Book I am co-authoring that is update weekly by MVP Tony Redmond, to match the ever-changing Microsoft Cloud. The book is called Office 365 for IT-Pros and comes highly recommended.

Set yourself unavailable with this open source PowerShell based Pomodoro timer

Update: An executable Windows app has been created based on this open source script to simplify the process. Read about it here

MVP Jan Egil Ring and I have created a GitHub PowerShell project called PsProductivityTools. There you will find a function called Start-Pomodoro with the following features

  • Count down for 25 minutes by default or a period specified by you
    • Start-Pomodoro -Minutes 10
  • The function will set your computer in presentation mode which will suppress all notifications and popups on your windows machine
  • Set your Skype for Business client in Do Not Disturb using a custom presence state called Pomodoro Sprint and set your personal note to when you will be available
  • You can mute and unmute your phone during the Pomodoro Sprint using IFTTT triggers
    • You need to have created the mute and unmute triggers, generated a webhook key and installed IFTTT on your mobile
    • Will write a tutorial in a later blogpost
  • It will make you available again after 25 minutes or your specified time, turning on notifications, making you available again in Skype for Business and unmute your phone. Awesome stuff :)

This is an open source project on GitHub so please feel free to add your own suggestions to the project.

How to get started

  1. Open PowerShell and run the following cmdlet
    • Install-Module -Name PSProductivityTools
    • if you need to update it later run Update-Module -Name PSProductivityTools and restart all PowerShell instances
    • You need to run PowerShell as administrator in order to install the module
  2. Now you can run Start-Pomdoro at any time from PowerShell
    • Start-Pomodoro
      • This will set your computer in presentation mode
    • Start-Pomodoro -Minutes 15 -EndPersonalNote “It’s a good day today”

What is the Pomodoro Technique?

The goal of the technique is to reduce the impact of internal and external interruptions on focus and flow. A pomodoro is indivisible. When interrupted during a pomodoro, either the other activity must be recorded and postponed (inform – negotiate – schedule – call back) or the pomodoro must be abandoned. The technique uses a timer to break down work into intervals, traditionally 25 minutes in length, separated by short breaks. These intervals are named pomodoros. Read more about the Pomodoro Technique here

Why the Pomodoro Technique?

If I can get one Pomodoro done in between meetings, workshops and calls, then I am happy. That Pomodoro is priceless and it helps me answer that long email, get started on that document or wrap my head around a problem. 25 minutes is long enough so that I can reach my flow state and short enough that I feel that I actually can do it. It may take between 5-10 minutes to reach the flow state. If I manage to interrupt myself with social media, coffee break or decide to do something else, then I may spend longer time in total on that email instead of just get it done during a Pomodoro. If you want to succeed with Pomodoro, you need to make yourself unavailable, but equally important, you need to make yourself available again when those 25 minutes have passed. That is why we created the Pomodoro PowerShell tool

What is flow?

Flow is the peak performance state where you feel your best and you perform your best. The good news is, it’s hackable. One of the hacks is inducing flow using the Pomodoro Technique. Read more about flow over at the Flow Genome Project

An important part of succeeding with the Pomodoro Technique is lists with your most important tasks that you can prioritize. I use OneNote for that. Check out how I do it in my OneNote LifeHacks YouTube series 

Lock down your Lync status and PC notifications using PowerShell

PomodoroRecently I wrote a blogpost on Control your Lync presence during a Pomodoro Sprint using PowerShell. This awesome script uses a timer and the Lync SDK to lock down Lync for 25 minutes while I get some real work done. The only thing I did not find out was how to suppress is Outlook popups and other notifications.

Thanks to a great tip by MVP Olav Tvedt i found out that you can set your laptop in presentation mode using the commandline tool presentationsettings

  • PresentationSettings /start
  • PresentationSettings /stop
  • Works from PowerShell as well

Using the script on a desktop

Apparently PresentationSettings is not installed on desktop computers by default. Searching the net I found a post by MVP Robert Sparnaaij where he described that you can use registry to enable this feature on desktop computers as well: http://www.msoutlook.info/question/380

If you save the below text to a .reg file and run it you will add the settings necessary to enable PresentationSettings and you are good to go

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\MobilePC\MobilityCenter]
"RunOnDesktop"=dword:1

[HKEY_CURRENT_USER\Software\Microsoft\MobilePC\AdaptableSettings]
"SkipBatteryCheck"=dword:1

; WARNING: Using Registry Editor incorrectly can cause serious problems that may require you to reinstall Windows. Microsoft cannot guarantee that problems resulting from the incorrect use of Registry Editor can be solved. Use Registry Editor at your own risk.

Download the script and check out how I use the Pomodoro Technique with Lync and PowerShell here: https://msunified.net/2017/08/23/set-yourself-unavailable-with-this-open-source-powershell-based-pomodoro-timer/

Lync Server and PowerShell – My favourite features, oneliners and scripts

I was preparing to speak at Microsoft Technology User Group (MTUG) here in Norway at the PowerShell Script Club. My session for the night was going to be Lync Server Management Shell. First I thought I was not going to prepare anything and wing the whole session. The more I thought about it, winging any session that I am going to give in front of an audience is seldom a good idea. So I thought, ok make a blog post instead. I will here add my favourite features, oneliners and scripts that I have found working with Lync Server. I will update this blogpost as I remember and find new features, oneliners and scripts. Please let me know of your best PowerShell tricks in Lync.

Last updated 17.01.2012

Connecting

In addition to log on the Lync Server and open Lync Server Management Shell you can also access and work with Lync through remote PowerShell which came available in V2. Here is what you need to connect. The url could be your external webservices url as well

$session = New-PSSession -ConnectionUri https://lync-admin.contoso.local/OcsPowershell -Credential (Get-Credential)
Import-PSSession -Session $session

Finding cmdlets

There are several ways to find cmdlets in Lync. If you like the graphical representation like a mind map there is some good ones created by MVP Tom Arbuthnot

In PowerShell there is some cmdlets available as well when finding what is available

#Get all cmdlets for Lync that contains -Cs
Get-Command *-Cs* -CommandType cmdlet -Module Lync
#Get all cmdlets that contains user
Get-Command *user* -CommandType cmdlet -Module Lync

#When you find the cmdlet you want to use find the syntax on how to use it
Get-Help Get-CsUser -Examples
#Use -Online to open the TechNet website for that cmdlet
Get-Help Get-CsUser -Online

#Looking for a specific setting to set and don't know which cmdlet that can modify it use the below code
$params = Get-Command -CommandType Cmdlet *-Cs* | % { $n = $_.Name ; $_.Parameters.Values | % { Add-Member -in $_ noteproperty CmdletName $n; $_ } }
$params | where { $_.Name -like "*meeting*" } | select Name,CmdletName
#This is cool, found the trick over at http://blogs.technet.com/b/csps/archive/2010/06/14/howtofindsetting.aspx

Cmdlets

There are some cmdlets I use more than others and find useful. Let me know what is your most used cmdlets.

#List a lot of the topology information, here you can sort to find URLs, ports and servernames configured
Get-CsService

#List all pools in your topology, useful for finding Front End pool name, when you forget it
Get-CsPool

#The only policy that is not available in Lync Control Panel, lot of nice features can be configured here
Get-CsClientPolicy

#Update the AddressBook files
Update-CsAddressBook

#List the CMS replication status for each Lync Server
Get-CsManagementStoreReplicationStatus

Oneliners

The most used oneliners that I use

#Find what Lync Services are running
Get-CsWindowsService -ExcludeActivityLevel | ft Name, Status
#Start any stopped services
Get-CsWindowsService -ExcludeActivityLevel | where {$_.Status -like "Stopped"} | Start-CsWindowsService

#Find all users that are enabled for Lync and have a LineUri, sort them by LineUri, display displayname and LineUri
Get-CsUser -Filter {LineURI -ne $Null} | sort -Property LineURI | ft DisplayName,LineURI

#Quickly find and open the share folder for the Lync pool
Invoke-Item(Get-CsService -FileStore | Select-Object -ExpandProperty UncPath)

Scripts

There are a lot of scripts that is created and expand on Lync Server PowerShell functionality and and some that simplifies working with Lync as well as monitors the solution. Below are some of my favourite scripts. Please let me know of other epic scripts out there.

Set-Lync2010Features.ps1

A script to install prerequisites on Server 2008 R2 before you start install Lync Server on the OS.  You can download the resource kit tools, Silverlitght and other tools easily. You even have som post deployment options in the script as well. This script is highly recommended and I use it in every deployment.

List-UnusedNumbers.ps1

A scripts that read unassigned numbers and depends on you having put you entire number serie there. It will find all numbers assigned to users, devices and features in Lync and find what numbers are available in any given unassigned numbers series. This is a script that saves you the pain of managing available numbers in an excel sheet.

Set-GlobalVoiceRouting.ps1

This script is for demo or initial deployments only. It is created for norwegian rules and genereates an easy way to dial out through one gateway and has the usual normalization rules for Norway. To edit the script and find the nomralization rules for your country see the Dialing Rule Optimizer.

Reset-UserPolicies.ps1

This script is used in an OCS to Lync migration scenario. It will reset all policies to $Null so that they use Global or Pool level policies for External access, Voice Policy and so on. The reason for this is that all users should use what you define for Lync and not what you inherit from OCS.

Get-CsConnections.ps1

This script lists user connections, client versions and the distribution of users in a load balanced scenario

Monitoring OCS and Lync Peak Call Capacity

Script to monitor how many concurrent calls a particular OCS or Lync Mediation Server is handling. The script grabs the counters for inboud and outbound calls, parses their values, adds them together, and dumps the output into a CSV file. A good tool to find how many concurrent calls you have on your deployment

Update-AdPhoto.ps1

A script that enables you to import AD photos from file and store it in the thumbnailPhoto attribute. It is a central feature in Lync to show a photo of users

New-SipContact.ps1

A script to enable users to search for external contacts and Video Conferencing endpoints from Lync. It creates a contact in AD and adds the SIP address to the msRTCSIP-PrimaryUserAddress so it will be synced to the addressbook in Lync.

Scripting Tips

There is a lot of techniques used for scripting. The best script tips I know of I will list here.

Use Write-Debug

Lets you easilly define debug lines that can test variables and logic in you script that is good to use when developing the script but that not need to be there when it is used in production. When you want to debug the script you change the $DebugPreference from ‘SilentlyContinue’ to ‘Continue’. Then all Write-Debug lines will be displayed.

$DebugPreference = 'Continue'

$var = Read-Host "Enter a computer name"
Write-Debug “’$var’ contains $var“

$DebugPreference = 'SilentlyContinue'

Use Functions

Functions are scripts in scripts. If it is certain things you need to do more than once in you script, make it a function with an input and output. I have also seen functions being used to organize your script in a better way to make it easier and more ordered to view.

Function Do-Something ($computername,$domainname) {
	# function code goes here
}

Resources

The Official Lync PowerShell Blog: http://blogs.technet.com/b/csps/p/categories.aspx
The Official Lync PowerShell Blog Cmdlet Descriptions: http://blogs.technet.com/b/csps/archive/2010/07/16/refallcmdlets.aspx
MVP Pat Richard’s Blog: http://www.ehloworld.com/category/powershell

Change the default Calendar AccessRight on all mailboxes to Reviewer

Back in july 2010 I created a script to set the default AccessRight to Reviewer for Exchange 2010. This was a new feature for Exchange 2010 that we could use the command Set-MailboxFoldersPermission to change AccessRights on specific folders on the server level. As the calendar is a folder we now could do this organization wide using PowerShell.

The reason for creating this script is when migrating customers in Norway most of them want to allow everyone to use side by side calendaring in Outlook and Oulook Web App. In Exchange 2003/2007 we needed to instruct users how to set Default to Reviewer. This script sets it for all users. The script works for both Exchange Online and Exchange Server 2010. For Exchange 2007 check out this post on how to do it: http://exchangeshare.wordpress.com/2008/05/27/faq-give-calendar-read-permission-on-all-mailboxes-pfdavadmin/

Get the script here: https://msunified.net/exchange-downloads/script-set-calendarpermissions-ps1/

What the script does

As the picture shows you get three menu items.

  1. Will set the permission on all users and resources
  2. Will set the permission on all users and reources created the last 30 days
  3. Will give a user you specify Editor access to a mailbox you specify
    • This is good for switchboard or secretary functions

How to run the script against an Exchange Online environment

  • Connect to Exchange Online through PowerShell Remoting
$cred = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic -AllowRedirection
Import-PSSession $Session
  • Set Execution Policy to unrestricted
Set-ExecutionPolicy Unrestricted
  • Run the script by copying the script, saving it as a ps1 file, navigate to it in PowerShell and start typing set-Cal and hit TAB to use TAB completion
.\Set-CalendarPremissions.ps1

Resources

Administering Microsoft Office 365 using Windows PowerShell: http://blog.powershell.no/2011/05/09/administering-microsoft-office-365-using-windows-powershell/

Script to enable Global Voice Routing in Lync Server 2010

With Lync Server 2010 more and more deployments involve Enterprise Voice and Pstn access. When implementing in pilots and single site environments my customers tend to want everyone activated being able to dial to the Pstn network regardless of location or position.

With this in mind I have created a script to easily implement appropriate Nomralization Rules, Pstn Usage, Route with Gateway and Voice Policy without any typos. Since all this is intended for global use and the scope is global, all users get access to the Dial Plan and Route. All calls and numbers are routed through a single Gateway.

The script is run at your own risk, tips and feedback is most appreciated

View and download the script here: https://msunified.net/lyncdownloads/script-set-globalvoicerouting-ps1/

Intended Scenario

  • One CentralSite
  • One PstnGateway
  • All Enterprise Voice users will be able to call
  • All previous configuration will be removed

To have a clean as possible configuration some existing default configuration is removed

  • The “Prefix All” Normalization Rule on the Global Dial Plan
  • The Local Route under Routes is removed
  • All the default PstnUsage records are removed
  • Running the script several times does no harm, all error messages are suppressed

The Script creates the following

  • Four Norwegian Nomralization Rules under the Global Dial Plan
    • No need to Grant users with usage
    • Just change and adapt them to your own country/environment before running the script
  • Creates PstnUsage named Global
  • Edits the Global Voice Policy and adds PstnUsage Global
  • Finds the PstnGateway configured in the Topology Builder
    • Only one is added
  • Creates a new Route named GlobalRoute and adds Global as PstnUsage and the PstnGateway found earlier
  • Creates a VoiceTestConfiguration for one of the normalization rules
  • Runs the Test
  • Displays the result

Screenshot

Script to find available telephone numbers in Lync Server 2010

Having worked on a couple of Enterprise Voice deployments since the launch of Lync Server 2010 I have been missing a feature that I honestly thought would be incorporated by launch. It is the ability to find unused available numbers in a given number range assigned to the Lync Server based on Unassigned Numbers. I even hoped it would be possible to assign a teluri to users through a drop down list in the Silverlight GUI since the information is available in the server. I hope this will be available in a later Service Pack or Cumulative Update.

Since this is a feature I really want, I have tried to create a PowerShell Script to find out how many numbers are available in any given number range and what they are. First of all I want to declare that I am a PowerShell novice so my syntax may not be that optimized. The script works, though there’s a lot of variables and loops that I am sure could be done better. The script does the following:

  • It goes through each entry in Unassigned Phone Numbers that needs to be populated with all numbers series available to the Lync Server
  • Then it gets all teluri’s for all the users, dial-in conferencing and Exchange UM contacts
    • I didn’t find the response group command to get the teluri while I was at it, will add this in an update
  • Then the string gets “washed” for “tel:+47” where 47 is the hardcoded region code for Norway
    • The string also get “washed” for any extension numbers
  • After that a new string gets created to get rid of property types and so on
  • I use Compare-Object to compare the Unassigned Number array with the used numbers
    • Run a check to find what numbers where not used and count them
  • Then I find out what the total number of unused numbers are and write the output

I hope this script will come useful to anyone who needs this feature and that others can use this to and adapt it to their needs. Please share any improvements that could be made to the script. Enjoy!

https://msunified.net/lyncdownloads/script-list-unusednumbers-ps1/

Installing Lync Server 2010 Prerequisites on Windows Server 2008 R2

When installing Lync Server 2010 some roles requires specific Windows Features to be installed. The features are about the same as for OCS 2007 R2.

NOTE: This article will be updated when more information and requirements become available and necessary. Last update 02.12.2010

Part One – Prerequisites required on all server roles

  • Open PowerShell as administrator and run the following commands
  • Import-Module ServerManager
  • Add-WindowsFeature NET-Framework-Core,Telnet-Client
  • Install the prerequisites for the specific role as described in Part Three
  • Run Windows Update untill everything is updated
  • Install the Lync Server 2010 binaries for the role you are installing
  • Do post installation tasks as described in Part Two

Part Two – What to install AFTER Lync Server 2010 is installed

I describe it here so it is more accessible rather than in the end of the post

Part Three – Commands to install prerequisites for Lync Server 2010 on Windows Server 2008 R2

Front End, Director and Group Chat Server Roles on Windows Server 2008 R2

NOTE: To be able to run schema, forest and domain prep from the Front End Server you need to have the Remote Server Administrative Tools [RSAT-ADDS] installed. It is only required on the first Front End server in you organization. For more information on preparing AD see: http://technet.microsoft.com/en-us/library/gg398607.aspx

  • Open PowerShell as administrator and run the following commands
  • Import-Module ServerManager
  • Add-WindowsFeature RSAT-ADDS,Web-Static-Content,Web-Default-Doc,Web-Http-Errors,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Log-Libraries,Web-Http-Tracing,Web-Windows-Auth,Web-Filtering,Web-Stat-Compression,Web-Mgmt-Console,Web-Scripting-Tools,Web-Client-Auth,Desktop-Experience

Installs the following components:

  • [RSAT-ADDS] – Remote Server Administrative Tools
  • [Web-Static-Content] – Static Content
  • [Web-Default-Doc] – Default Document
  • [Web-Http-Errors] – HTTP Errors
  • [Web-Asp-Net] – ASP.NET
  • [Web-Net-Ext] – .NET Extensibility
  • [Web-ISAPI-Ext] – Internet Server API (ISAPI) Extensions
  • [Web-ISAPI-Filter] – ISAPI Filters
  • [Web-Http-Logging] – HTTP Logging
  • [Web-Log-Libraries] – Logging Tools
  • [Web-Http-Tracing] – Tracing
  • [Web-Windows-Auth] – Windows Authentication
  • [Web-Filtering] – Request Filtering
  • [Web-Stat-Compression] – Static Content Compression
  • [Web-Mgmt-Console] – IIS Management Console
  • [Web-Scripting-Tools] – IIS Management Scripts and Tools
  • [Web-Client-Auth] – Client Certificate Mapping Authentication
  • Anonymous Authentication (This is installed by default when IIS is installed)
  • [Desktop-Experience] – Desktop Experience

NOTE: Installing on Server 2008 R2 SP1, you need to do this step manually. All Front End Servers and Standard Edition servers where conferencing will be deployed must have the Windows Media Format Runtime installed. The Windows Media Format Runtime is required to run the Windows Media Audio (.wma) files that the Call Park, Announcement, and Response Group applications play for announcements and music. Thats why Desktop Experience is installed. If you only want to install the correct runtime run the command below:

  • Run using Command Prompt as administrator
  • Requires reboot
  • %systemroot%\system32\dism.exe /online /add-package
    /packagepath:%windir%\servicing\Packages\Microsoft-Windows-Media-Format-Package~31bf3856ad364e35~amd64~~6.1.7601.17514.mum
    /ignorecheck

Mediation Server Role on Windows Server 2008 R2

  • No additional features required for mediation

EDGE Server Role on Windows Server 2008 R2

  • Need one aditional hotfix for Lync EDGE Server Role.
    • Note: This hotfix is included in SP1 for Server 2008 R2
    • Windows Server 2008 R2 update available from Microsoft Knowledge Base article 2028827, “The applications that use the TDI driver for network traffic may stop responding in Windows Server 2008 R2 or in Windows 7,” at http://go.microsoft.com/fwlink/?LinkId=205459

Monitoring and Archiving Server Roles on Windows Server 2008 R2

NOTE: If Monitoring og Archiving is deployed in the topology, all server roles must install the below features, including the Monitoring and Archiving Servers

  • Open PowerShell as administrator and run the following commands
  • Import-Module ServerManager
  • Add-WindowsFeature msmq-server,msmq-directory

Installs the following components:

  • [MSMQ-Server] – Message Queuing Server
  • [MSMQ-Directory] – Directory Service Integration

Software Automatically Installed by Lync Server Setup

When you install Lync Server 2010 on a server, some software that is required by Lync Server is installed automatically (that is, if the required software is not already installed on the server). This includes the following:

  • Microsoft Visual C++ 2008 Redistributable
  • Microsoft Visual J# version 2.0 Redistributable
  • URL Rewrite Module version 2.0 Redistributable
  • SQL Server 2008 Express SP1
  • SQL Server 2008 Native Client

References:
For more information see TechNet documentation: http://technet.microsoft.com/en-us/library/gg398686.aspx