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
Post a Comment