Powershell Script to get Report Group-enabled SharePoint sites Get all sites with the Office 365 Group template
<#
.NOTES
=========================================================================================================================================
Author: Kamal Pandey
DESCRIPTION : Report Group-enabled SharePoint sites Get all sites with the Office 365 Group template
#>
$siteUrl = Read-Host "Enter SharePoint Admin Center Url"
try
{
Set-ExecutionPolicy RemoteSigned
$Cred = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic -AllowRedirection
Import-Module (Import-PSSession $Session -Allowclobber) -Global
Connect-MsolService -Credential $Cred
Connect-SPOService -Url $siteUrl -credential $Cred
}
catch
{
write-host "Failed to connect to SharePoint online site at " $siteUrl -ForegroundColor Red
write-host $_ -ForegroundColor Red
return;
}
# ===Start Script ===========================================================
Write-Host "Analyzing SharePoint sites created with the Office 365 Groups template..."
$Sites = Get-SPOSite -Template "GROUP#0" -IncludePersonalSite:$False -Limit All
$Report = [System.Collections.Generic.List[Object]]::new()
$ErrorSites = 0
$i = 0
Foreach ($Site in $Sites) {
$i++
$ProgressBar = "Processing site " + $Site.Title + " (" + $i + " of " + $Sites.Count + ")"
Write-Progress -Activity "Checking SharePoint Sites" -Status $ProgressBar -PercentComplete ($i/$Sites.Count*100)
$GroupId = (Get-SpoSite $Site.Url -Detailed).GroupId.Guid
#$Owner = $_.owner
# User this code if above code dont support.
#$GroupId = (Get-UnifiedGroup | Where-Object {$_.SharePointSiteUrl -eq $Site.url}).ExternalDirectoryObjectId
# Check if the Office 365 Group exists
$ErrorText = $Null
$O365Group = $Null
$O365Group = (Get-UnifiedGroup -Identity $GroupId -ErrorAction SilentlyContinue)
If ($O365Group -eq $Null) {
$O365GroupName = "Unknown Office 365 Group"
$ErrorText = "Failed to find Office 365 Group for site " + $Site.Title + " identifier " + $GroupId
$O365GroupMembers = 0
$ErrorSites++ }
Else {
$O365GroupName = $O365Group.DisplayName
$O365GroupMembers = $O365Group.GroupMemberCount
$O365GroupType = $O365Group.GroupType
Try {Get-Team -GroupId $GroupId | Out-Null}
Catch {$TeamsEnabled = $False} }
# Get group owner
$url = $Site.URL
$own = (Get-SPOSite $url).Owner
$own = $own -replace "_o", ""
$managedby = (Get-UnifiedGroup $own).managedby
$Owner = $managedby
# Generate a line to print
$ReportLine = [PSCustomObject]@{
#Site = $Site.Title
Group_Name = $O365GroupName
Group_URL = $Site.URL
Group_Owner = $Owner
Last_Content = $Site.LastContentModifiedDate
Current_Usage = $Site.StorageUsageCurrent
Error = $ErrorText}
$Report.Add($ReportLine)
}
$currenttime = Get-Date -Format g
Write-Host "All done" $ErrorSites "O365Group sites report has been generated- Finish Time:" $currenttime
# Export to csv
$Report | Sort Site | Export-CSV c:\Reports\GroupSiteInformation.csv -NoTypeInformation
Comments
Post a Comment