Teams Calendar View in Apple CarPlay


A small post on something that I only noticed today, which is that one of the recent updates for the Teams app on iOS introduced the much welcome support for Calendar View in Teams on CarPlay. This was published since January as Roadmap ID 114306 and is also published in the Message Center as MC516905. I am currently running Teams for iOS version 5.5.0, so that build definitely contains this functionality.

No longer you need to tell Siri you want to join your ‘next meeting’, as you now will be presented with current and upcoming events. You can join any meetings early simply by tapping on them, and joinable meetings will display a phone icon, which you can also tap to join. Of course, you can only join Teams meetings, if you tap a regular appointment you will get a notice that this is not a Teams meeting.

The picture below shows the Calendar View both on Teams Mobile (left) and the corresponding view as displayed on Teams for iOS with CarPlay (right). It shows our Test meeting which is currently in progress, as indicated by a progress bar as well.

Note that the calendar view is showing today’s items, and only from the currently active account in Teams Mobile on your connected mobile device. If you have multiple accounts configured, switching accounts on Teams Mobile is required to show their respective calendars. Doing so will update the Calendar View immediately and allows you to join those meetings using the display. A holistic view would be nice, but compared to where Teams on CarPlay is coming from, this is already a big step in usability.

A small request to the Teams development group: Please use meaningful descriptions to the version history, as this added functionality is nowhere to be found between the “Bug fixes and performance improvements” and occasional mention of functionality changes.

Change Teams Guest Profile Picture


In tenants with lots of Guests, the massive display of user initials – the default profile picture – isn’t very pleasing to the eye. Now while regular user can change their profile picture, Guest users cannot. Therefor, a long standing and popular request on UserVoice has been the ability to change profile pictures for Guest users. End of 2020, this request was updated, indicating a change was planned to incorporate the ability to change this profile picture. No signs on the roadmap yet, so what options – if any – does one currently have?

Last week, Teams MVP Yannick Reekmans posted a blog containing instructions on how to change your profile picture for tenants in which you are a Guest. It requires quite some steps and fiddling to accomplish this. One might also wonder, isn’t this possible “the programmatic way”? Well, yes, and here are the steps:

First, open up PowerShell, install the AzureAD PowerShell module it is not yet installed using Install-Module AzureAD, and connect to Azure Active Directory, specifying the tenant where you are a guest:

Connect-AzureAD -TenantDomain contoso.onmicrosoft.com

When the authentication challenge pops up, specify the credentials of the Guest account and approve the Multi-Factor Authentication challenge when required.

Next, use Set-AzureADUserThumbnailPhoto to set the profile picture for your Guest account, specifying your User Principal Name as ObjectId, as well as the picture you want to use, e.g.

Set-AzureADUserThumbnailPhoto -ObjectId 'michel_fabrikam.com#EXT#contoso.onmicrosoft.com' -FilePath 'c:\pic.jpg'

Regarding the User Principal Name, you can use Yannick’s method of determining your Guest’s ID. You can also try to guesstimate it by taking the e-mail address of your original account, replacing ‘@’ with ‘_’, adding a trailing #EXT# followed by ‘@’ and the default domain of the hosting tenant. The picture can be JPEG or PNG format, size 100kb at most, and square dimensions work best.

To verify the image has been set successfully, use Get-AzureADUserThumbnailPhoto -ObjectId <ID>. Then, have some patience for the change to propagate throughout the directories and caching mechanisms. To verify your update was successful and your picture looks properly, you can close the Teams client, clear the locally cached Teams data by removing everything under %AppData%\Microsoft\Teams (Windows), and start Teams again.

To easily spot tenants where you are a guest user and not a regular user, you might want to alter your standard issue profile picture a bit. For example, I have added a text label ‘Guest’ to mine. It doesn’t look as good as the high resolution photos that you can store in Exchange Online, but it certainly looks less boring than a set of intilials.

Note that all of the above is not an officially supported way to manage this picture. So, until there is one, these steps might help you out.

Holiday Season Teams background


Update: Per request, added SharePoint and OneDrive, and did some manual corrections.

A really short post on a Ugly Sweater background with Exchange, Teams and Outlook theme to use during those conference calls end of December. Enjoy!

Like it or not, leave feedback in the comments. Also, suggestions are welcomed. In case you are not aware, I keep a set of custom background for you to enjoy here.

Module Updates: What’s New?


After updating your PowerShell modules which support managing parts of the Microsoft 365, some of us are curious about what changes are introduced with the updated module. In the world of continuous change, it is hard to keep track of these changes. New cmdlets or parameters get added to support new features, and some get removed as they become obsolete. So, how to discover what those changes are after updating to the latest module?

Time to blog on a small script I created for this purpose a long time ago, Compare-Cmdlets.ps1. This script has two operating modes:

  • Export currently available cmdlets and parameters for supported modules.
  • Compare two exports of cmdlets & parameters and report the differences.

Currently, the following command sets are supported:

ModuleTest CmdletExport File
AzureADGet-AzureADUserAzureAD-<version>.xml
ExchangeOnlineGet-MailboxExchangeOnline-<version>.xml
ExchangeOnlineManagementGet-ExoMailboxExchangeOnlineManagent-<version>.xml
MicrosoftOnlineGet-MsolUserMSOnline-<version>.xml
TeamsGet-TeamMicrosoftTeams-<version>.xml

Command sets are exported per module, where a module is assumed to be present by a simple check for cmdlet availability (specified in column Test Cmdlet). That is, if Get-Mailbox is available, the ExchangeOnline module is assumed to be available. It does not distinguish between the Exchange PowerShell module or ‘classic’ Remote PowerShell session, nor will it take into account the repository origin of the module, nor if the Get-AzureADUser is coming from the AzureAD or AzureADPreview module.

That said, here’s how this is works. Load up PowerShell and have your modules installed and ready. Some modules like ExchangeOnlineManagement require connecting to the service first to import the cmdlet functions, so for ExchangeOnlineManagement run Connect-ExchangeOnline first. Same applies to the newer Teams modules, where the Skype Connector functions are only available after running New-CsOnlineSession.

Then run Compare-Cmdlets to export the cmdlets and parameters for those modules. The commands will by default be exported to an XML in a subfolder named ‘data’. The name of the file is mentioned in the table above. If you want to use a different folder to store the XML files, use DataFolder parameter.

Note that with Exchange, the cmdlets available to you depend on which role you have been assigned in Exchange’s Role-Based Access Control model. For example, if you haven’t explicitly assigned Mailbox-ImportRequest to your account, you will not see it in the exports. Therefor, when exporting module changes, it is required using an account with the same roles assigned to have proper exports. But when needed, you can also use it to report on command set differences between two Exchange Online accounts.

After updating some of the modules, or downloading one of the command set reference XMLs I stored with the script on GitHub, you can use Compare-Cmdlets to compare different versions of module exports. For example, to compare the cmdlets of Microsoft Teams module 1.1.4 with those after updating to 1.1.5, use

.\Compare-Cmdlets.ps1 -ReferenceCmds data\MicrosoftTeams-1.1.4.xml -DifferenceCmds data\MicrosoftTeams-1.1.5.xml

From the output, we see for example that:

  • The cmdlet Get-TeamChannel has a new GroupId parameter.
  • The cmdlet New-CsGroupPolicyAssignment parameter PolicyType has been removed.
  • The cmdlet Add-TeamChannelUser is new.

Note that common parameters (e.g. Verbose and ErrorAction) and optional common parameters (e.g. WhatIf) are left out of the equation. Also, parameters are not compared in depth and only presence is checked. If for example a parameter changes type (e.g. string to multivalue), Compare-Cmdlets does not pick that up.

As-is, the script is made to run on demand from an interactive PowerShell session. Ideally, this would run scheduled and serverless from within the service, reporting changes by e-mail.

The script Compare-Cmdlets.ps1 can be downloaded from GitHub here. If you find this useful, would like to comment or have suggestions, use the comments below or leave them on GitHub.

MS Teams & pre-Exchange 2016CU3


Updated May 9th: Added Share to Teams. to table

With the emergency to facilitate working from home due to the Corona pandemic, many organizations were faced with a dilemma. When running Exchange 2013 or some even Exchange 2010 on-premises, and a desire to start using Microsoft Teams, organizations were confronted with the following requirements for integrating Microsoft Teams with Exchange on-premises (source):

  • Users with mailboxes hosted on-premises must be synchronized to Azure Active Directory.
  • Running Exchange 2016 Cumulative Update 3 or later on-premises.
  • OAuth needs to be configured (via Hybrid Configuration Wizard, or manual as MVP fellow Jaap blogged about here).
  • Recently, an additional requirement was added to explain that for delegates to schedule calendar meetings on behalf of another person, some additional steps are required (steps 2-3 mentioned here).

Now as you might know, Exchange 2010 does not support OAuth authentication. But, by putting Exchange 2016 in front of Exchange 2010, Exchange 2016 can be used for dealing with OAuth authentication, as well as dealing with client traffic as it can down-level proxy to Exchange 2010 for mailboxes hosted on those servers. Looking at these requirements, organizations might conclude that putting Exchange 2016 CU3 in front of their Exchange environment, and configuring OAuth would suffice the requirement to integrate Teams with their Exchange on-premises environment.

image

Alas, the additional requirement for full Teams integration is that the mailbox server hosting the mailbox should support REST API. Teams leverages Graph REST API calls to interact with mailboxes. In an Hybrid Exchange setup, on-premises mailboxes are identified, and related REST API calls will be directed at the on-premises REST endpoint, landing on your Exchange environment. The requirement for REST API support is something which is not explicitly stated in the Teams integration article, despite my earlier pull request.

It is however stated implicitly in an article on REST support in Hybrid Exchange or the original publication on REST API support in Exchange 2016 CU3 by the Exchange PG, two articles which you might easily have missed or forgotten about. Either way, it states that “All on-premises mailboxes that will use the REST APIs must be located on databases located on Exchange 2016 CU3 servers”.

Thus, with REST API support only being available per Exchange 2016 CU3, Teams will not fully integrate with mailboxes hosted on earlier versions of Exchange. Exchange 2016 can be used to offload OAuth when your mailbox is still on Exchange 2010 (which works fine for Exchange Web Services for Free/Busy, for example), but Exchange 2010 does not support REST API, and thus will never understand those ‘weird’ (proxied) requests landing on /api virtual directory, typical of REST API calls. Consequently, you will see AutodiscoverV2 and REST API calls greeted with a 404:

2020-04-29 20:22:52 fd86:b628:2775:1:9502:cdcc:d4b1:5950 GET /autodiscover/autodiscover.json Email=chefke%40contoso.com&Protocol=REST&RedirectCount=1 443 CONTOSO\EX2$ fd86:b628:2775:1:9f8:2d9:c8a1:3c4a SkypeSpaces/1.0a$*+ 404 0 2 31

Typically, first thing users usually will notice missing is the Calendar integration:

image

Knowing this, the assumption could be that this combination doesn’t work at all, but as often the truth lies somewhere in the middle. You can use Teams when mailboxes are still hosted on pre-Exchange 2016 CU3, if you can live with the limitations. Below I have included a short overview of these, or other noteworthy items. The information is complementary to the How Exchange and Teams interact article. I hope it may help in discussions on what works and what doesn’t.

Disclaimer: Validated with mailbox hosted on Exchange 2010 with Exchange 2016 in front, OAuth and SkypeOnline AppId configured, and using Outlook 2016 C2R. Information may be subject to change. The list may not be conclusive; if you have any additional observations, please leave them in the comments.

ActionsWorksComment
Create & View Meetings in TeamsNoNo Calendar integration as this requires Outlook Calendar REST API. Visual clue is absence of the Calendar button.
Modify User Photo in Teams (client)NoDoesn’t work when mailbox is hosted in Exchange on-premises.
Call HistoryYesHistory propagates to mailboxes hosted in Exchange on-premises in ‘Teams Calls’ folder.
Access Outlook ContactsNoWorks only with Exchange Online mailboxes.
VoicemailYesMay use & receive voice-mail, but can’t play from Teams.
Free/Busy statusYesUses EWS.
Create & View/Update Teams Meetings from OutlookYesUsing default Teams Meeting add-in.
Create Teams Meetings from Outlook as DelegateNoTeams Scheduler uses AutodiscoverV2 to discover delegate EWS endpoint, and fails. Outlook will display “Sorry, but we can’t connect to the server right now. Please try again later.”
View/Update Teams Meetings from Outlook as DelegateYesEWS is used to fetch and update the calendar item.
MailTips in TeamsNoMailTips like Out of Office are not shown in Teams. MailTips work for Exchange 2016 CU3+.
Create & View Channel Meetings in TeamsNoDoesn’t work when mailbox is hosted in Exchange on-premises.
Share to TeamsNoDoesn’t work when mailbox is hosted in Exchange on-premises.

Of course, the better experience is to be had when your mailbox is hosted on Exchange 2016 CU3 or later (including Exchange 2019), or best when you simply host them in Exchange Online. However, given the circumstances and pressure from the organization to use Teams, that route might not be an option for everyone. Organizations may look at substantial investments in time and resources. In those cases, it might be good to know of alternative less preferable scenarios, and more important, any possible limitations you might encounter when taking a shortcut.

Ignite 2019: Exchange & Related Sessions


ignite2019Note: If you are looking for the script to download Ignite contents, you can find it at the TechNet Gallery or Github.

It shouldn’t be a surprise to you, but this is the week of Ignite 2019 in Orlando, where Microsoft and other speakers will not only tell you about the latest and greatest, and how to implement recent products and use their technologies, but also draw more of the roadmap of things to come. Unfortunately, I won’t be attending Ignite (again), but similar to last year Microsoft will be live streaming keynotes, breakouts as well as theater sessions. So, you can watch stuff as it happens in the comfort of your own home or on-demand at a later time.

To access the catalog, including live streams, you can of course dive in the 1981 sessions located on the Ignite portal. Details on sessions, speakers etc. as well as filtering options are already present to help you pick what to watch, and recorded media will be added as it becomes available, including slidedecks.

For your convenience, I made a short list of sessions on Exchange Server, related technologies such as Outlook Mobile but also Teams and Groups, as well as some potentially interesting IT Pros sessions on Graph:

Session When Title Speakers
BRK2296 11/4/2019 2:15 PM Communication in Microsoft 365: Outlook and Teams integration opportunities Brandon Haist
THR2269 11/4/2019 3:00 PM Using Microsoft Teams: What’s new and how to get started Aya Tange, Jeremy Chapman
THR3039 11/4/2019 3:25 PM What’s new in the Office Customization Tool Chris Hopkins
BRK3095 11/4/2019 4:30 PM Understanding the importance of collaboration in modern work and the role O365 plays to unlock your team?s productivity Ronald Pessner, Patrick Gan, Dan Costenaro, Megan Dohnal
BRK2056 11/4/2019 4:30 PM Embrace Office 365 Groups: What’s new and what’s next Mike McLean, Venkat Ayyadevara
BRK2001 11/4/2019 4:30 PM What’s amazing and new in calendaring in Outlook Julia Foran
THR3084 11/4/2019 5:45 PM Microsoft 365 admin: Ask us anything Aaron Woo, Ben Appleby, Alice Appleton, Tim Heeney, Karissa Larson, Yeonsoo Kim
THR1131 11/4/2019 6:20 PM The solution to intranet adoption…Microsoft Teams Daniel Diefendorf
BRK3013 11/5/2019 9:00 AM Modern Exchange IT admin experiences Rahul Gupta, Eddie Savage
BRK1079 11/5/2019 10:15 AM Five hybrid cloud backup and disaster recovery mistakes to avoid Douglas Ko, Shawn Gifford, Carl Holzhauer, Julian Simpson
BRK3140 11/5/2019 10:15 AM Notes from the field: Successfully steering the government to Office 365 Michael Van Horenbeeck
BRK3012 11/5/2019 10:15 AM Exchange hybrid: Advanced scenarios, roadmap, and real-world stories! Andy Ryan, William Holmes
THR2016 11/5/2019 10:20 AM Outlook for Windows: What’s new and what’s next David Gorelik
THR3082 11/5/2019 10:55 AM Protect against phishing and other cyberthreats with Microsoft 365 Business David Bjurman-Birr
THR3083 11/5/2019 12:40 PM Office 365 Groups: Ask us anything Mike McLean, Venkat Ayyadevara, Kolvekar Loveleen Ramachandra, Nivedita Rajani, Salil Kakkar, Arunkumaran Varadharajan
THR2252 11/5/2019 1:50 PM How Microsoft manages its own employee Office 365 tenancy David Haam, David Johnson, Darren Moffatt
ADM50 11/5/2019 2:00 PM Managing across tenant boundaries in Office 365 Steve Silverberg, Robert Lowe
BRK2003 11/6/2019 9:00 AM Get ahead with Outlook mobile: Intelligent technology that helps you stay on top of your day Tali Roth, Michael Palermiti
MLS1035 11/6/2019 9:15 AM Microsoft Graph 101 for developers and IT professionals Yina Arenas, Jeremy Thake
THR3003 11/6/2019 10:55 AM New, fast, and reliable Exchange Online PowerShell cmdlets Tony Redmond
BRK3311 11/6/2019 11:30 AM Outlook mobile: The gold standard for secure communications in the enterprise Ross Smith, Lexi Torres
BRK2005 11/6/2019 12:45 PM Outlook for Mac – re-invented! Vivek Kumar, Alessio Roic
THR2270 11/6/2019 1:50 PM Microsoft Teams for IT admins: What’s new and what you need to know with Anne Michels Anne Michels, Jeremy Chapman
THR2007 11/7/2019 9:00 AM Stop organizing your own meetings ? Let Scheduler do it for you Warren Johnson
BRK3264 11/7/2019 10:15 AM Transform collaboration and fight shadow IT with Office 365 groups Arunkumaran Varadharajan, Sahil Arora
THR3033 11/7/2019 11:30 AM Reading SMTP headers like a boss Jeff Guillet
BRK2059 11/7/2019 11:30 AM Data residency with Office 365 datacenters Brian Day, Adriana Wood
THR2217 11/7/2019 12:05 PM Email is the easy part: Five pitfalls to avoid in tenant-to-tenant migrations Paul Robichaux
BRK3144 11/7/2019 1:00 PM The MVP guide to Office 365 security, Exchange Online edition Theresa Miller
BRK3142 11/7/2019 2:15 PM Things you never knew about Microsoft Teams that might be important some day Tony Redmond
BRK3312 11/7/2019 3:15 PM Office 365 email enhancements that makes your organization smart, safe, and secure Leena Sheth, Kevin Shaughnessy
BRK2104 11/7/2019 3:15 PM Your users are under attack! Strengthen your anti-phishing defense with these O365 ATP best practices Girish Chander
BRK2058 11/8/2019 9:00 AM Deploy Office 365 groups at scale to power Microsoft Teams, Outlook, Yammer, and SharePoint Salil Kakkar, Martina Grom
BRK2002 11/8/2019 9:00 AM There is a new Outlook on the web: See what’s new, fresh, and exciting David Meyers
BRK2090 11/8/2019 9:15 AM Will Microsoft Teams take over from email? Tony Redmond
BRK3248 11/8/2019 10:15 AM Securing Exchange Online from modern threats Brandon Koeller
BRK3257 11/8/2019 10:30 AM Leverage the cloud to strengthen your on-premises Active Directory security Charity Shelbourne, Mark Morowczynski
THR3034 11/8/2019 12:05 PM Twenty minutes to a secure environment Jeff Guillet

Note that the table above was constructed using the Get-EventSession script. I’ll be closely monitoring things this week to try to make sure it can retrieve Ignite contents as it gets published and cope with any changes in publishing as happened in recent years during the event.

Teams Mobile & Account Switching


Teams

Update: Added note about Intune App Protection policies.

One of the most requested features for Microsoft Teams on UserVoice is the ability to switch accounts. When you are working in consulting like me, chances are you need to switch accounts very often. This means you need to log in and out of every account to interact with their or guest access teams. Meanwhile your company might also be sending you messages, so you have to log in there as well. Now, on desktops one can leverage browsers’ private mode to accomplish simultaneous logons, but for mobile clients such alternative does not exist. All in all, this situation is far from ideal.

Now, the mobile workforce can rejoice, as iOS and Android received a client update (1.0.8.0 on iOS, don’t have Android device at hand currently). The updated client allows them to add more than one account, and quickly (and I mean quickly) switch between these accounts and guest accounts.

image
More button

To add an account, open the menu (), open Settings and select Add account at the bottom to add an existing account to your configuration.

After you finish adding accounts, you can switch between accounts by opening the menu, and selecting one of the accounts or guest access which are shown at the bottom, grouped with the account they belong to. Example is shown right (yes, this is dark mode).

To remove an account, activate the account (by selecting it or one guest access), open the menu, and select Settings and Sign Out.

Another benefit is when your tenant is Azure Information Protection enabled. After logging in, you get prompted and need to restart the Teams app. That annoyance doesn’t happen when switching accounts, as the app remains logged in when switching.

Note that at the moment, badges are only updated within the same account and guest access.

raNote that you cannot configure more than one account which has Intune App Protection configured. If you already have an IAP-enabled account and another gets IAP enabled, Teams requires you to pick one of the IAP accounts to be removed from the Teams app configuration.

Now, the only thing left to do is hope this functionality will arrive for Teams Desktop soon.