Teams are Built on Groups and Some Groups are Hidden
In April 2018, Microsoft decided to hide the Office 365 Groups (now Microsoft 365 Groups) created by Teams from Exchange address lists. At the time, the logic was impeccable. The Groups created by Teams didn’t need to be visible to Exchange clients because Teams is used for conversations rather than email, so it made sense to hide those groups. Teams marks the groups it creates as not available to Exchange clients by setting the HiddenFromExchangeClients property to $True.
Setting the property means that the hidden groups are excluded from the address lists used by Exchange clients. The lists include the Global Address List and All Groups, used by clients like Outlook, OWA, and Outlook mobile to validate addresses entered in messages. Groups created in SharePoint, Planner, Stream, or Yammer are available to Exchange clients, as are those groups created by an Exchange client. All these groups are visible in the GAL and All Groups list (Figure 1), but the groups created by Teams are not.
Figure 1: Groups listed in the Exchange Online Global Address List (GAL)
The Problem for Teams Meetings
Microsoft made the change, Exchange clients didn’t notice that the groups used by Teams had disappeared, and all was well. That is, until May 15 when Microsoft announced that the attendee picker used by the Teams calendar app now includes Exchange Online distribution groups and Microsoft 365 Groups.
Figure 2: Selecting a group when scheduling a Teams meeting
The problem now exposed by the law of unintended consequences is that users cannot schedule meetings with a team (to invite all members) because the attendee picker used by the Teams calendar app is based on Exchange address lists, which means that the hidden groups aren’t shown. The reason why people want to schedule a meeting with team members is that they want each member to receive a meeting invitation in the same way that members of a distribution list receive invitations when a meeting is scheduled from Outlook.
You could argue that arranging a meeting in a team channel serves the same purpose, but channel meetings don’t generate individual invitations for users. Details of those meetings go into the group mailbox for the team that the channel belongs to.
Teams Calendar App Only Schedules with Visible Groups
The Teams calendar app allows some Teams to be selected because their HiddenFromExchangeClients property is set to $False. For instance, this command finds the set of team-enabled groups in a tenant:
I found that 27 are hidden but 39 are listed in the GAL. Cue the potential to confuse users when some teams can be used to schedule meetings, and some cannot. The reason why some groups are hidden and others are not is probably linked to the age of the group. Team-enabled groups created before April 2018 are likely not hidden while those created afterwards are hidden, unless someone has changed the flag with PowerShell using a command like:
Group Subscriptions Decide Who Receives Event Notifications
However, it’s not just a matter of exposing groups to Teams as other settings control who receives invitations to meetings sent to the group. Each group has a subscriber list to determine who receives messages sent to the group, including invitations to events. When an event is scheduled with a group, Exchange Online sends invitations to the members on the group’s subscriber list whose subscription indicates they wish to receive copies of calendar events. Group owners and administrators can update settings which control subscriptions with PowerShell.
The AutoSubscribeNewMembers property controls if new members are automatically added as subscribers.
The AlwaysSubscribeMembersToCalendarEvents switch can be used to control what events users receive. Members of a team probably are probably only interested in calendar events, so you can run this command to instruct the group to restrict the subscription for new members to events.
Individual members can override the default settings for the messages they wish to receive from a group by changing their Follow in Inbox settings after selecting the group in OWA or Outlook. Figure 3 shows how to change the settings in Outlook for Windows. To receive meeting notifications, the user selects either All Email and Events or Only Replies to You and Events.
Figure 3: Changing the Follow in Inbox settings for a group through Outlook
Existing members might not be subscribed to the group. In this case, you can add people to the subscriber list:
Or take all members of the group and add them to the subscriber list:
$Members = Get-UnifiedGroupLinks -LinkType Members -Identity MyGroup
Foreach ($M in $Members) {
Add-UnifiedGroupLinks -LinkType Subscribers -Links $M.PrimarySmtpAddress -Identity MyGroup }
After users are added as subscribers, they receive invitations to new calendar events.
In summary
Microsoft 365 Groups give a lot to Teams, but their history and some of the changes made since their introduction occasionally throw up conflicts like this between the way Groups were designed to work with Outlook and how Teams would like them to work. If you want to schedule meetings with Teams, make sure that the group belonging to the teams aren’t hidden from Exchange address lists. Or create and send meeting invitations with Outlook to the group’s SMTP address.
But if you want team members to receive personal invitations for events sent to the group, add them to the group’s subscriber list or add them as individual attendees to the meeting invitation. Clear as mud!
Thinking about why things work the way they work inside Office 365 can be tough. Office 365 for IT Pros masters the detail to inform and delight its subscribers with information. Shouldn’t you be a subscriber?
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
One Reply to “Why Teams Can’t Schedule Meetings with (Some) Teams”