AdminDroid 2bc6941269 Find Microsoft 365 Group Storage Size Report
Find Microsoft 365 Group Storage Size Report
2023-10-06 17:54:30 +05:30

162 lines
6.8 KiB
PowerShell
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<#
=============================================================================================
Name: Get storage used by Office 365 groups
Description: This script find Office 365 groups' size and exports the report to CSV file
Version: 1.0
Website: o365reports.com
Script Highlights:
~~~~~~~~~~~~~~~~~
1. The script uses modern authentication to connect to Exchange Online.
2. The script can be executed withMFA enabled account too.
3. Automatically install the EXO V2 and SharePoint PnP PowerShell module (if not installed already) upon your confirmation.
4. Credentials are passed as parameters (Scheduler-friendly), so worry not! i.e., credentials can be passed as parameters rather than being saved inside the script.
5. Exports the report result toa CSV file.
6. Lists the details of the storage used in each Office 365 group.
For detailed script execution: https://o365reports.com/2022/05/18/get-the-storage-used-by-office-365-groups-using-powershell/
============================================================================================
#>
#PARAMETERS
param
(
[Parameter(Mandatory = $false)]
[Switch] $NoMFA,
[String] $UserName = $null,
[String] $Password = $null,
[String] $TenantName = $null #(Example : If your tenant name is 'contoso.com', then enter 'contoso' as a tenant name )
)
#Check for SharePoint PnPPowerShellOnline module availability
$PnPOnline = (Get-Module PnP.PowerShell -ListAvailable).Name
if($PnPOnline -eq $null)
{
Write-Host "Important: SharePoint PnP PowerShell module is unavailable. It is mandatory to have this module installed in the system to run the script successfully."
$Confirm= Read-Host Are you sure you want to install module? [Y] Yes [N] No
if($Confirm -match "[yY]")
{
Write-Host "Installing SharePoint PnP PowerShell module..." -ForegroundColor Magenta
Install-Module PnP.Powershell -Repository PsGallery -Force -AllowClobber
Import-Module PnP.Powershell -Force
#Register a new Azure AD Application and Grant Access to the tenant
Register-PnPManagementShellAccess
}
else
{
Write-Host "Exiting. `nNote: SharePoint PnP PowerShell module must be available in your system to run the script"
Exit
}
}
#Check for ExchangeOnline module availability
$Exchange = (Get-Module ExchangeOnlineManagement -ListAvailable).Name
if ($Exchange -eq $null)
{
Write-Host "Important: Exchange Online PowerShell module is unavailable. It is mandatory to have this module installed in the system to run the script successfully."
$Confirm = Read-Host Are you sure you want to install module? [Y] Yes [N] No
if ($Confirm -match "[yY]")
{
Write-Host "Installing ExchangeOnlineManagement module" -ForegroundColor Magenta
Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
Import-Module ExchangeOnlineManagement -Force
}
else
{
Write-Host "Exiting. `nNote: ExchangeOnline PowerShell module must be available in your system to run the script."
Exit
}
}
#Connecting to ExchangeOnline And SharePoint PnPPowerShellOnline module.......
Write-Host "Connecting to ExchangeOnline and SharePoint PnPPowerShellOnline module..." -ForegroundColor Cyan
#Authentication using non-MFA
if($NoMFA.IsPresent)
{
#Storing credential in script for scheduling purpose/ Passing credential as parameter
if(($UserName -ne "") -and ($Password -ne ""))
{
$SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force
$Credential = New-Object System.Management.Automation.PSCredential $UserName,$SecuredPassword
}
else
{
$Credential= Get-Credential -Credential $null
}
if($TenantName -eq "")
{
$TenantName = Read-Host "Enter your Tenant Name to complete the proccess (Example : If your tenant name is 'contoso.com', then enter 'contoso' as a tenant name ) "
}
Connect-PnPOnline -Url https://$TenantName.sharepoint.com/ -Credentials $Credential
Connect-ExchangeOnline -Credential $Credential
}
#Authentication using MFA
else
{
$TenantName = Read-Host "Enter your Tenant Name to complete the proccess (Example : If your tenant name is 'contoso.com', then enter 'contoso' as a tenant name ) "
Connect-PnPOnline -Url https://$TenantName.sharepoint.com/ -Interactive
Connect-ExchangeOnline
}
#Get storage used by office 365 groups...
Write-Host "Getting office 365 groups storage..."`n
$OutputCsv=".\Office365GroupsStorageSizeReport_$((Get-Date -format MMM-dd` hh-mm` tt).ToString()).csv"
#Getting all sites which have an underlying Microsoft 365 group
$GroupSites = Get-PnPTenantSite -GroupIdDefined $true | Select-Object StorageUsageCurrent, StorageQuota, Url
$GroupCount = 0
Get-UnifiedGroup -ResultSize unlimited | ForEach-Object {
$GroupName = $_.DisplayName
Write-Progress -Activity "Processed Group Count : $GroupCount" "Currently Processing Group : $GroupName"
$SharePointSiteUrl = $_.SharePointSiteUrl
if($SharePointSiteUrl -ne $null)
{
$GroupSite = $GroupSites | Where-Object { $_.Url -eq $SharePointSiteUrl }
$GroupStorage = @{'Group Name' = $GroupName; 'Group Email' = $_.PrimarySmtpAddress; 'Group Privacy' = $_.AccessType;'Storage Used (GB)' = [math]::round($GroupSite.StorageUsageCurrent/1024,4); 'Storage Limit (GB)' = $GroupSite.StorageQuota/1024; 'Created On' = $_.WhenCreated}
}
else
{
$GroupStorage = @{'Group Name' = $GroupName; 'Group Email' = $_.PrimarySmtpAddress; 'Group Privacy' = $_.AccessType;'Storage Used (GB)' = "Group not used yet"; 'Storage Limit (GB)' = "Group not used yet"; 'Created On' = $_.WhenCreated}
}
$ExportGroupStorage = New-Object PSObject -Property $GroupStorage
$ExportGroupStorage | Select-Object 'Group Name','Group Email','Group Privacy','Storage Used (GB)','Storage Limit (GB)','Created On' | Export-Csv -path $OutputCsv -NoType -Append
$GroupCount++
}
#Groupcount details
if($GroupCount -ne 0)
{
Write-Host "$GroupCount Office 365 groups found in this organization."`n
}
else
{
Write-Host "There is no office 365 group found in your organization"
}
#Open output file after execution
if((Test-Path -Path $OutputCsv) -eq "True")
{
Write-Host " The office 365 groups storage report available in:" -NoNewline -ForegroundColor Yellow; Write-Host $OutputCsv
Write-Host `n~~ Script prepared by AdminDroid Community ~~`n -ForegroundColor Green
Write-Host "~~ Check out " -NoNewline -ForegroundColor Green; Write-Host "admindroid.com" -ForegroundColor Yellow -NoNewline;
Write-Host " to get access to 1800+ Microsoft 365 reports. ~~" -ForegroundColor Green `n`n
$Prompt = New-Object -ComObject wscript.shell
$UserInput = $Prompt.popup("Do you want to open output file?",` 0,"Open Output File",4)
If ($UserInput -eq 6)
{
Invoke-Item "$OutputCsv"
}
}
#Disconnect the SharePoint PnPPowerShellOnline module
Disconnect-PnPOnline
#Clean up session
Get-PSSession | Remove-PSSession