Use powershell to retrieve all subsites for sharepoint online -


i'm trying write powershell script retrieve site collections, groups , subsites our sharepoint online tenancy. far i've been able sites, groups , users in each group. i'm having trouble getting subsites , identifying lists unique permissions (and retrieving permissions hopefully!)

so far have lists:

add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.dll"  add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.runtime.dll"   $password = read-host -prompt "enter password" -assecurestring $credentials = new-object microsoft.sharepoint.client.sharepointonlinecredentials("username", $password)  $siteurl = "https://site/sites/test"  $ctx = new-object microsoft.sharepoint.client.clientcontext($siteurl)   $ctx.credentials = $credentials  $web = $ctx.web  $lists = $web.lists  $ctx.load($lists) $ctx.executequery()  foreach($list in $lists) {     write-host $list.title } 

and site groups , users:

connect-sposervice –url https://site-admin.sharepoint.com   $sites = get-sposite -detailed  foreach ($site in $sites) {      write-host $site.title     $sitegroups = get-spositegroup -site $site.url      foreach ($group in $sitegroups)         {               $users = get-spouser -site $site.url  -group $group.title -limit |ft -wrap                $url = $site.url               $groupname = $group.title               write-host $groupname + ' ' + $group.users            }   }  

so lists tried using $list.hasuniqueroleassignments determine if list returned has unique permissions seems return false if there unique permissions. subsites can count of subsites, how url?

thanks in advance!

edit: i've been able url of subsites using client context code used lists:

$subs = $web.webs $ctx.load($subs) $ctx.executequery()  foreach($sub in $subs) {     write-host $sub.url } 

still stuck getting permissions though...

for sharepoint online (spo) microsoft released sharepoint online management shell contains get-sposite cmdlet return 1 or more site collections.

example:

add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.dll"  add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.runtime.dll"  $adminurl = "https://tenant-admin.sharepoint.com/" $username = "username@tenant.onmicrosoft.com" $password = "password" $securepassword = $password | convertto-securestring -asplaintext -force $credentials = new-object -typename system.management.automation.pscredential -argumentlist $username, $securepassword  #retrieve site collection infos connect-sposervice -url $adminurl -credential $credentials $sites = get-sposite  

how retrieve sites via csom in powershell

since sharepoint online management shell not contain cmdlets working sites, utilize csom api purpose. below function retrieves sites in site collection:

function get-spowebs(){ param(    $url = $(throw "please provide site collection url"),    $credential = $(throw "please provide credentials") )    $context = new-object microsoft.sharepoint.client.clientcontext($url)     $context.credentials = $credential    $web = $context.web   $context.load($web)   $context.load($web.webs)   $context.executequery()   foreach($web in $web.webs)   {        get-spowebs -url $web.url -credential $credential         $web   } } 

example: print sites site collection in spo

add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.dll"  add-type –path "c:\program files\common files\microsoft shared\web server extensions\15\isapi\microsoft.sharepoint.client.runtime.dll"    $username = "username@tenant.onmicrosoft.com" $password = "password" $securepassword = $password | convertto-securestring -asplaintext -force $spocredentials = new-object microsoft.sharepoint.client.sharepointonlinecredentials($username, $securepassword)  $allwebs = get-spowebs -url 'https://tenant.sharepoint.com' -credential $spocredentials $allwebs | %{ write-host $_.title } 

result

by combining both techniques achieve desired results:

#retrieve site collection infos connect-sposervice -url $adminurl -credential $credentials $sites = get-sposite   #retrieve , print sites foreach ($site in $sites) {     write-host 'site collection:' $site.url          $allwebs = get-spowebs -url $site.url -credential $spocredentials     $allwebs | %{ write-host $_.title }        write-host '-----------------------------'  }     

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -