Skip to main content

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

Popular posts from this blog

Business-critical processes with SharePoint and SQL

SharePoint 2010 provides the ability to connect to backend business systems, surface business data in SharePoint and make it accessible by, and useful to, employees across the organization. Almost every company of significant size uses ERP and CRM solutions to run core business processes. Over time, companies have developed detailed practices around using such systems to support vertical disciplines within the organization (e.g. product planning, financial performance management, supply-chain management, etc.),  yet challenges remain with regard to driving visibility and collaboration, based on business data, across different disciplines and teams. These challenges stem from the fact that only a fraction of employees are licensed and trained to use those backend systems, and from the high cost and complexity of integrating such systems across different functions and teams. With SharePoint and SQL, once the relevant business data is surfaced in an enterprise-wide...

Powershell Script to Restrict Group Creation on Office 365

$GroupName = "<SecurityGroupName>" $AllowGroupCreation = "False" Connect-AzureAD $settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value "Group.Unified" -EQ).id if(!$settingsObjectID) { $template = Get-AzureADDirectorySettingTemplate | Where-object {$_.displayname -eq "group.unified"}     $settingsCopy = $template.CreateDirectorySetting()     New-AzureADDirectorySetting -DirectorySetting $settingsCopy     $settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value "Group.Unified" -EQ).id } $settingsCopy = Get-AzureADDirectorySetting -Id $settingsObjectID $settingsCopy["EnableGroupCreation"] = $AllowGroupCreation if($GroupName) { $settingsCopy["GroupCreationAllowedGroupId"] = (Get-AzureADGroup -SearchString $GroupName).objectid }  else { $settingsCopy["GroupCreationAllowedGroupId"] = $GroupName } Set-AzureADDirectorySetting -Id $...

Custom Actions Event Receiver

using System; using System.Collections.ObjectModel; using System.IO; using System.Runtime.InteropServices; using System.Xml; using Microsoft.SharePoint; using Microsoft.SharePoint.Administration; using Nintex.Workflow; using Nintex.Workflow.Administration; using Nintex.Workflow.Common; using System.Reflection; namespace CFSP.CustomActions.Features.WebApplication___Custom_Actions {     [Guid("07607091-449b-422b-94e4-84e6d863eb9e")]     public class WebApplication___Custom_ActionsEventReceiver : SPFeatureReceiver     {         #region Events         public override void FeatureActivated(SPFeatureReceiverProperties properties)         {             SPWebApplication parent = (SPWebApplication) properties.Feature.Parent;             AddCustomAction(parent, properties, "ReadFromPropertyBagAction.nwa");     ...