Hello,
Posting this in the hopes it helps someone out there.
Generate list of all SharePoint Online sites with Plumsail configured
[code]Add-Type -Path “C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll”
Add-Type -Path “C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll”
$plumsailLogPath = Read-Host -Prompt “Enter path for log file to be written to, e.g., C:\temp\siteswithplumsail.txt”
$username = Read-Host -Prompt “Enter your username”
$password = Read-Host -AsSecureString -Prompt “Enter your password”
$adminCentreURL = Read-Host -Prompt “Enter the URL to your admin centre, e.g., https://xyz-admin.sharepoint.com”
$spoAdminCentreCredentials = New-Object System.Management.Automation.PSCredential($username, $password)
$spoCollectionCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
function main() {
$sitesWithPlumsail = @()
Connect-SPOService -Url $adminCentreURL -Credential $spoAdminCentreCredentials
$sites = Get-SPOSite | select -ExpandProperty Url
Disconnect-SPOService
foreach ($site in $sites) {
$sitesWithPlumsail += (recurse $site $spoCollectionCredentials)
}
$sitesWithPlumsail | Out-File $plumsailLogPath
}
function recurse($url, $credentials) {
$sitesWithPlumsail = @()
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$ctx.Credentials = $credentials
$web = $ctx.Web
$properties = $web.AllProperties
$webs = $web.Webs
$ctx.Load($web)
$ctx.Load($properties)
$ctx.Load($webs)
try {
$ctx.ExecuteQuery()
} catch {
return ($sitesWithPlumsail += ("AccessDenied: " + $url))
}
$ctx.Dispose()
if ($properties.FieldValues.PlumsailActionsPackSettings.Length -gt 0) {
$sitesWithPlumsail += $url
}
foreach ($subsite in $webs) {
$sitesWithPlumsail += (recurse $subsite.url $credentials)
}
return $sitesWithPlumsail
}
main[/code]
Kind regards,
Stephen