Quick way to do this is with PowerShell:
#Connect to Office365 Import-Module MSOnline Connect-MsolService $O365Cred = Get-Credential $O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection Import-PSSession $O365Session #Check if the user has an Alternate Email Address (Recovery Address) Get-MsolUser -UserPrincipalName [email protected] | select -ExpandProperty AlternateEmailaddresses #Check if the user has an Alternate Email Address (Recovery Address) Set-MsolUser -UserPrincipalName [email protected] -AlternateEmailAddresses [email protected]
If this setting is unset for an administrator, Office365 gives you a nice reminder about adding an alternate email address in case your primary account gets locked out.

You can add this information when first setting up the account:

It can also be added for an existing admin user by going to the Gear, Office 365 settings, and edit your settings in the ‘meâ€
section, you can enter your mobile phone number and alternate email there.
In simple terms Room List work as distribution groups for conference or other types of rooms.

#Connect to Office365 Import-Module MSOnline $O365Cred = Get-Credential $O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection Import-PSSession $O365Session
New-DistributionGroup -Name HQ -DisplayName "HQ" –PrimarySmtpAddress [email protected] –RoomList

Add-DistributionGroupMember –Identity "HQ" -Member [email protected]

Get-DistributionGroup | Where {$_.RecipientTypeDetails -eq "RoomList"} | Format-Table DisplayName,Identity,PrimarySmtpAddress
Get-DistributionGroupMember –Identity "HQ"]]>
SharePoint frequently reuses terms, which often makes conversations and forum posts a lot of fun. Thereâ€
s at least three “Groups†in Office 365:
Office 365 Groups are a combination of an Exchange email account with the groupâ€
s name that is used to store conversations, and a “OneDrive – like†site collection to store files.
A collection of Office 365 Groups facts:
s OneDrive.
s no limit for number of Groups per tenant.
s owner is deleted.
s not considered to be a personal OneDrive. There is no “user†for the Group OneDrive. The mailbox can store up to 50GB of messages, posts and calendar entries. The SharePoint Site Collection has a max of 1TB.
s not customizable.
t check out/in. (I saw this listed as a feature, but itâ€
s not in my tenants.)
s no Site Permissions page or 2nd tier recycle bin.
t recover files deleted by members.
t find a place to change Public/Private status after the group has been created.
)| Groups | Team Sites | |
| Can add lists/libraries | No | Yes |
| Can add pages | No | Yes |
| Can add columns/metadata | No | Yes |
| Can use Content Types | No | Yes |
| Can hide membership | No | Yes |
| Can brand | No | Yes |
| Can be fully managed with PowerShell | No | Yes |
So since this feature is enabled by default. Users in your organization may have already started creating groups and hidden SharePoint site.
So first we need to disable this option right away.
Now need to check your company-wide configuration settings through the Get-MsolCompanyInfo Windows PowerShell cmdlet. This cmdlet will display your current company-wide configuration settings that affect all users. You specifically need to verify that the UserPermissionToCreateGroupsEnabled parameter is set to False.
To check your Company-level configuration settings
You will first need to connect to your Office 365 service. In the Windows Azure Active Directory Module for Windows PowerShell, type and enter the following:
Connect-MsolService
In the Sign in to your Account screen, enter your credentials to connect you to your service, and click Sign in.

You will be returned to a prompt in the Windows Azure Active Directory Module.
You will need to display your company-wide configuration settings. To do this, type and enter:
Get-MsolCompanyInformation
This will display a listing of the current configuration settings that apply to all users in your company.

As you can see the value for the UsersPermissiontoCreateGroupsEnabled setting is True. We need to change this to False.
To change the UsersPermissionToCreateGroupsEnabled setting value
You will first need to use the Set-MsolCompanySettings cmdlet to change the UsersPermissionToCreateGroupsEnabled parameter to False. In the Windows Azure Active Directory Module for Windows PowerShell, type and enter the following:
Set-MsolCompanySettings - UsersPermissionToCreateGroupsEnabled $False
You will be returned to a prompt in the Windows Azure Active Directory Module.
After changing the setting, you then need to run the Get-MsolCompanyInfo cmdlet to verify that the value has changed to True.
Get-MsolCompanyInfo
After running the cmdlet, check the displayed information to verify that the UsersPermissionToCreateGroupsEnabled setting value has changed to False.
#Connecting to SharePoint #User account with Global Admin Permissions $adminUPN="[email protected]" #Organization Name (myorganizationinc.onmicrosoft.com) $orgName="myorganizationinc" #Prompting and using the password $userCredential = Get-Credential -UserName $adminUPN -Message "Type the password." #Making the Connection Connect-SPOService -Url https://$orgName-admin.sharepoint.com -Credential $userCredential
Get a list of Site Collections
Get-SPOSite -Detailed | Format-Table -AutoSize
More than likely the Group SharePoint Site is restricted to the user that may have created it. You may get this error when trying to remove it:

To remove it you need to take ownership as the CollectionOwner
Set-SPOUser -Site http://myorganizationinc.sharepoint.com/sites/<YourGroupsSite> -LoginName [email protected] -IsSiteCollectionOwner $true
Now if you want to do this for all the site collections:
$Sites = Get-SPOSite
ForEach ($Site in $Sites)
{
Set-SPOUser -Site $site -LoginName [email protected] -IsSiteCollectionOwner $true
}
Once this is applied the admin will be able to remove the hidden Sharepoint collection. Remove the site collections that are no longer needed.
Remove-SPOSite -Identity https://myorganizationinc.sharepoint.com/sites/<YourGroupsSite> -NoWait
Now to delete the groups that the users created. Head over to the Office365 Admin Portal.
Click the “Office 365 group” from the selection to show all groups (These should be all cloud based)

Once the groups are displayed remove them as necessary.
Groups are no longer in your environment.
If you are in Hybrid mode you cannot user Groups in a clean fashion. It will get messy. Sooner or later you will need to plan for migration of your distribution groups to Groups. Know your current limitations and hold.
Migrate distribution lists to Office 365 Groups – Admin help
The following table lists which distribution lists are eligible or not eligible for migration
| Property | Eligibility |
| On-premise managed distribution list. | Not eligible |
| Nested distribution lists. Distribution list either has child groups or is a member of another group. | Not eligible |
| Moderated distribution list | Not eligible |
| Distribution lists with send on behalf settings | Not eligible |
| Distribution lists hidden from address lists | Not eligible |
| Distribution lists with member RecipientTypeDetails other than UserMailbox, SharedMailbox, TeamMailbox, MailUser | Not eligible |
| Distribution lists with member join or depart restriction as Closed | Eligible. Converted to a private Office 365 Group. |
| Distribution lists with custom delivery status notifications. ReportToManager = true, ReportToOriginator = false ReportToManager = false, ReportToOriginator = false | Eligible. Office 365 groups don’t understand these properties, and delivery status notifications are always sent to the person that sent the email. |
Password Never Expires is bad security practice, but there are situations that might require it.
I had a similar request on how this could be done.
#Connect of Office365
Import-Module MSOnline
$O365Cred = Get-Credential
$O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection
Import-PSSession $O365Session
Connect-MsolService –Credential $O365Cred
#Get a List of user that belong to the second domain
$SDusers = Get-MsolUser -All -DomainName "yourseconddomain.com"
#Setting the password never to expire
ForEach($SDuser in $SDusers)
{
Set-MsolUser -UserPrincipalName $SDuser -PasswordNeverExpires $true
}
Get-MSOLUser -UserPrincipalName [email protected] | Select PasswordNeverExpires
]]>
In my case to check which users are covered and meeting policy and get the users addressed.
Get-MsolUser -All -DomainName "yourdomainname.com" | select DisplayName, LastPasswordChangeTimeStamp,@{Name=â€PasswordAgeâ€;Expression={(Get-Date)-$_.LastPasswordChangeTimeStamp}}
The output will be similar to:

Updating the global address list requires to have the Address List Management role. By default, nobody has this role.

Once you have the AddressList role assigned, you can use the powershell commands to update the address list. You will have to wait for sometime until the new cmdlets are available.
$UserCredential = Get-Credential $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection Import-PSSession $Session
s working. (This may take some to work after creating the role)Anyways, for someone who may come across this weird issue, here is the fix for it.
Set-Mailbox [email protected] -Type Regular
This will convert it from a shared mailbox, or a resource mailbox to a user mailbox.
]]>I like to make resource booking days 1 year from the day of making the reservation/ appointment. Now instead of visiting each calendar and making the change, powershell can help us out.
#Connect to Office365
$cred = Get-Credential
Import-Module MSOnline
Connect-MsolService -Credential $cred
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic -AllowRedirection
$importresults = Import-PSSession $s
#Get all the Rooms and make the booking days to 365
Get-MailBox | Where {$_.ResourceType -eq "Room"} | Set-CalendarProcessing -BookingWindowInDays 365
Happy Booking!
]]>These commands disable group creation for OWA and Outlook only. If you want to disable the group creation in your organization, use Azure Active directory settings. Check out Windows PowerShell for more details.
To disable Group creation for all users
Set-OwaMailboxPolicy -Identity yourdomainname.com\OwaMailboxPolicy-Default -GroupCreationEnabled $false
To disable a policy for a subset of users
New-OwaMailboxPolicy –Name “<policy name>â€
Set-OwaMailboxPolicy –Identity “<policy name>†–GroupCreationEnabled $false
t allowed to create Groups. Replace <user> with the name of the user.
Set-CASMailbox –Identity <user> -OWAMailboxPolicy “<policy name>â€
Sometimes admin forget to remove the license for the shared box after conversion and there is no GUI alternative to see if the shared mailbox is licensed. Shared mailbox in Office365 do not require a license.
To find out what shared mailboxes are “accidentally” licensed:
#Connect to Office365
Import-Module MSOnline
$O365Cred = Get-Credential
$O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection
Import-PSSession $O365Session
#To view summary information about your current licensing plans and the available licenses for each plan
Get-MsolAccountSku
#Find out shared mailboxes that are licensed
Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails SharedMailbox | Get-MsolUser | Where-Object { $_.isLicensed -eq "TRUE" }
#Find out shared mailboxes that are licensed and remove them
#You need to supply your licensing plan name to remove licenses
Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails SharedMailbox | Get-MsolUser | Where-Object { $_.isLicensed -eq "TRUE" } | foreach {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -RemoveLicenses "yourlicenseplan:ENTERPRISEPACK"}
]]>