The Groups expiration policy allows organizations to set an expiration period for Microsoft 365 groups and teams. If the groups remain in active use (based on certain Graph signals), Azure AD automatically extends their expiration date. In 2020, Microsoft reported that 79% of groups subject to the expiration policy met the bar for auto-renewal. The other 21% were either deleted by Azure AD or retained because a group owner responded to a prompt to renew. Many Microsoft 365 Groups in use today are teams-enabled and the likelihood is that most of the groups subject to the expiration policy are used with teams.
Unless administrators keep a close eye, it’s possible that Azure AD will remove an important group because the group owner failed to request renewal. For example, when a team comes within 30 days of its expiration date, owners receive notifications in their activity feed that they can use to renew the team (Figure 1).
Figure 1: Notifications for expiring teams appear in the activity feed
It’s worth noting that team owners also receive notifications via email to warn about impending expiration. The messages come from msgroupsteam@microsoft.com (the bring your own domain feature for service messages doesn’t cover these emails) and arrive 30 days, 15 days, and one day before Azure AD removes the group. It’s possible for team owners to overlook these messages if they don’t use email.
A New Insight for Teams Administrators
All of which brings me to Microsoft 365 message center notification MC542836, posted on April 17. The announcement covers changes to the Teams admin center (TAC) to give administrators more visibility into the set of teams approaching expiration and the teams already deleted.
To see teams approaching expiration, apply a filter to the set of teams to look for teams expiring in the next 7, 14, or 30 days (Figure 2).
Figure 2: Filter for expiring teams
After TAC applies the filter to the set of teams, you can renew selected teams (Figure 3). The expiration date for a renewed teams is set at today plus the expiration period set in the policy. My tenant uses a two-year (730 day) expiration period, which I think is a good compromise between keeping inactive groups forever and expiring groups too soon.
Figure 3: Renewing a team in the Teams admin center
Restoring Deleted Teams
It’s not a disaster when Azure AD removes an expired group because it’s easy to list and restore deleted groups using the Microsoft Entra admin center or PowerShell. However, if an administrator doesn’t restore a deleted group before the 30-day deletion period lapses, Azure AD permanently removes the group and all its connected resources. Monitoring the set of soon-to-be deleted groups is therefore sensible, perhaps using a PowerShell script to report groups and their expiration status.
To make management of deleted teams easier, the second extension to TAC is the addition of an option to View deleted teams to the Actions menu. The Deleted groups option in the Entra admin center lists all kinds of deleted groups while TAC restricts the set of deleted groups it displays to team-enabled groups. A shown in Figure 4, you can select and restore a deleted team at any time during its 30-day deletion retention period.
Figure 4: Restoring a deleted team in the Teams admin center
No Magic in New Options
There’s no magic behind the two new TAC options. Microsoft has taken options available elsewhere and adapted them to work solely with teams. There’s nothing wrong with that approach as it makes sense to provide the functionality to renew and restore teams in the tools people use. And anyway, if you don’t like performing these actions in a GUI, there’s always PowerShell.
Support the work of the Office 365 for IT Pros team by subscribing to the Office 365 for IT Pros eBook. Your support pays for the time we need to track, analyze, and document the changing world of Microsoft 365 and Office 365.
One Reply to “Teams Admin Center Gains Better Visibility for Expiring and Deleted Teams”
While our tenant hasn’t received the Teams admin enhancement yet, I have been experimenting with the groups expiration policy, never having enabled it before. This passage from the docs seems key:
“When you change the expiration policy, the service recalculates the expiration date for each group. It always starts counting from the date when the group was created, and then applies the new expiration policy.”
What that translates to is that email notices are sent out for ALL groups older than what you set the policy to. So, if you set it to 365, all groups older than 1 year, *even if active*, will receive the notice because, I guess, in the matter of minutes between when the policy was enabled and it begins its evaluation there was probably no activity.
I was thinking that it would have access to whatever the “Graph signals” are, some historical record of activity (the Admin center’s Usage section has that), but maybe that only applies going forward for this policy, not retroactively. If so, that’s a serious limitation for those who haven’t had it enabled all along.
{"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}
While our tenant hasn’t received the Teams admin enhancement yet, I have been experimenting with the groups expiration policy, never having enabled it before. This passage from the docs seems key:
“When you change the expiration policy, the service recalculates the expiration date for each group. It always starts counting from the date when the group was created, and then applies the new expiration policy.”
What that translates to is that email notices are sent out for ALL groups older than what you set the policy to. So, if you set it to 365, all groups older than 1 year, *even if active*, will receive the notice because, I guess, in the matter of minutes between when the policy was enabled and it begins its evaluation there was probably no activity.
I was thinking that it would have access to whatever the “Graph signals” are, some historical record of activity (the Admin center’s Usage section has that), but maybe that only applies going forward for this policy, not retroactively. If so, that’s a serious limitation for those who haven’t had it enabled all along.