Aaand again…another CRAZY Office365 issue solved, with a resolution out of left field. In this case, the user was having problems when replying to emails; not only did the email get delivered as usual, and the usual sent item was created in Sents, but the original email in the INBOX was being converted to a DRAFT! So if I sent him an email, and he replied to me, I’d get the reply as usual, but my original email, in his inbox, was turning into a draft.
In addition, he complained that his calendar was out-of-sync; things on his phone weren’t showing up in Outlook.
In doing some searching for this issue, I see a handful of people searching for the issue with varying degrees of successful answers. Since I ran into this recently, I figured I’d post up my own experience with fixing this.
Sometimes trying to be on the bleeding edge (or just ahead) often means trying to get things done quickly, which can result in breaking things in new and creative ways. Some people never admit their mistakes, I’m humble enough to not only admit them, but to share them so other people pulling their hair out as to why their booking site isn’t working can learn from my mistakes. Especially when they’re kinda funny.
I was trying to set up Microsoft Bookings for a group of individuals, and no matter what I did, I just could not actually get it to work. The backend was all there – staff is there, availability is there, and I can even manually book a slot from the admin portal, but the customer portal just stays on “loading” for all staff and offered no availability.
It was me…I goofed it up, and an easy goof at that 😉
Under the service settings, there is a setting called “Buffer Time”. That allows you to specify how long of a gap to set between each booked slot, so the staff can complete paperwork, get coffee, etc. I wanted to default it to 15 minutes before and 15 minutes after.
In my infinite wisdom, I actually put the “15” in the hours box in the after area, as such, there would never be availability as 15 hours is longer than the user’s daily availability. Once I changed it to be 15 minutes after, the bookings site worked as expected.
Again, I love to share things that seem to take a bunch of searching for, and in this case, trying to find a full list of commands when administering Exchange online/Office365 via Powershell. You won’t ever find a list really, because they’re changing all the time and may also be dependent on the type of tenant you have amongst other factors.
My first experience with switching a user from an existing calling plan in Microsoft Teams to Direct Routing did not go as planned. Not at all. I’ll walk you through what I did…and what I did wrong, as googling this particular error didn’t really lead me to the answer!
I seemingly had everything right – I followed the Configure Direct Routing documents to the T, and to switch the user over, I removed their calling plan, and then used powershell to add the ONPREMURI property (aka the user’s phone number) in E.164 format with the tel: prefix to the Teams user. I have the SBC all set up and outbound calls are working fine, yet inbound calls don’t seem to be working, as I’m getting a “404 Not Found” reply to the SBC invites in the SIP traces.
Yet another dreaded hurdle trying to enable OneDrive “Backup” (previously labeled as KFM, or “Known Folder Move”). When trying to enable OneDrive backup, you get an error: “The Documents folder contains other important folders and isn’t supported for file protection.”
Today I learned (thanks to Reddit) that although my Office365 tenant is still set to “islands” mode, the setting is actually applied per-user with each user actually defaulted to tenant global setting). You can enable any individual user for Teams-only mode, and even then, the setting can be reverted if need be, so it’s not permanent like most people tend to think.
It seems that amongst the settings, each one simply varies of the amount of work “Skype” will do, with “Teams-only” being the only one that truly switches things over to Teams. Even with both Skype and Teams installed, with the Tenant/User in “Islands” mode, calls get routed to Skype by default, including the mobile apps. You need to use Teams-Only mode to have Teams actually accept calls.
I also found some really interesting notification rules in the mobile app I don’t think I’ve seen before (Quiet Time and Quiet Days), and in addition, Teams -FINALLY- has a secondary ringer option so you can actually hear calls when you have a usb receiver or headset plugged in. (This may not be true for mac users yet, at least according to a couple other Reddit posts I’ve seen recently.)
Anyhow, it seems good things continue to come for Teams, and I can only imagine the onslaught of new features that’ll be announced at Ignite, I just hope they all work!
As I’m trying to clean up some accounts, I found that it’s -not easy- to simply get a list of all the groups a user is a member of in powershell, at least not like the one that displays in the admin portal. In doing some hunting (admittedly, not a lot of hunting) I came across this site that has just about what I was looking for, but I will warn you that the one-liners provided are not efficient – they have to populate the members of all groups, therefore if you have a LARGE directory, these may take a very long time to run, and be data-intensive. If you’re an SMB or SME with only a couple hundred users, they should be OK.
The problem was, it didn’t work! It looked good, but the variable it stored the results in was empty. After a quick review I realized the problem; the $mailbox.Alias at the end of the scripts should have been $mailbox.Name, since the alias will never match the name shown in the group membership. Once I changed that, it worked as it should:
$Office365GroupsMember = Get-UnifiedGroup | where { (Get-UnifiedGroupLinks $_.Alias -LinkType Members | foreach {$_.name}) -contains $mailbox.Name}
However…this only works for “Office365” Groups, and not all Office365 group types, that may include groups sync’ed from Active Directory/DirSync, like distribution lists and so on. I took the one-liner from that site, and modified it slightly to use “get-msolgroup” rather than get-unifiedgroup, which worked as it should.
From there you can pipe the output of that command into others, like remove-msolgroupmembership (although it needs the member objectid which is odd), or store it in a variable. Keep in mind you may want to filter group types as well, as I’m not sure you can remove a user from an Office365 group that was added/created as part of a Teams teams.