From 14adde3bb61ab11f1603cd3d698abc3b7135b105 Mon Sep 17 00:00:00 2001 From: AdminDroid <49208841+admindroid-community@users.noreply.github.com> Date: Wed, 18 May 2022 19:36:30 +0530 Subject: [PATCH] Get Office 365 Groups Storage Size Report Get Office 365 Groups Storage Size Report --- .../GetOffice365GroupsStorage.ps1 | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 Get Office 365 Groups Storage Size Report/GetOffice365GroupsStorage.ps1 diff --git a/Get Office 365 Groups Storage Size Report/GetOffice365GroupsStorage.ps1 b/Get Office 365 Groups Storage Size Report/GetOffice365GroupsStorage.ps1 new file mode 100644 index 0000000..e731635 --- /dev/null +++ b/Get Office 365 Groups Storage Size Report/GetOffice365GroupsStorage.ps1 @@ -0,0 +1,149 @@ +<# +============================================================================================= +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 +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..." +$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" +} +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 : $OutputCsv" -ForegroundColor Green + $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 \ No newline at end of file