another technical blog...technically

Friday, August 25, 2017

O365 team site external user issue

I love O365 because it enables (power) users to do whatever they want to. I saw people developing their own assets using Flow and Power Apps and share them across market units.
Moreover Team site evolved in something which is more user friendly, and people are able to create their own site for a project (mixing together Planner, SharePoint Online, OneDrive and other stuff) in order to include also external users and make them able to interact with them: this is common if the customer outsources lots of activities.
Lately i found a curious problem, i created a SharePoint group with also external users, after that i broke inheritance on some document library (customer does not want to allow everyone to see what's happening on the project site) and assign some custom permission to external users.
So i created custom groups and added people, and, even if O365 gave me no error, no user was added. I kept trying without results and, because i've to go on vacancy, i had to solve the problem easily.
At first time i read this link and then this other one by Microsoft and i set up this value as site collection sharing capability one.
Set-SPOSite -Identity https://contoso.sharepoint.com/sites/site1 -SharingCapability ExternalUserSharingOnly
I noticed that, if you face that problem, even if you are not able to accomplish the task using UI, you can do it using PowerShell, so, i created this small script that can help you to save your vacancy.
I have not found the root cause, meantime, have fun with this.
Before reading the other script, i wanna thank you Simone Anzaldi (Big up) who helped me with this problem.
# PARAM
$URL = "https://varrocorp.sharepoint.com/sites/Test"  

$USR = "admin@varrocorp.it"  
$PWD = "UsernamePassword"

$GROUPNAME = "Da Group"
$EXTERNALUSERNAME = "user@externaldomain.com"


# Import some libraries
Import-Module MSOnline
Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($URL)  

# Just converting plain text to secure string
$pwd = ConvertTo-SecureString -String $PWD -AsPlainText -Force
$creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($USR, $PWD)  
$ctx.credentials = $creds   

# Get root site details   
$web = $ctx.Site.RootWeb 

# Gets all site groups   
$groups = $web.SiteGroups
$ctx.Load($groups)  
$ctx.ExecuteQuery()  

# Get user info of the external user
$userInfo = $web.EnsureUser($EXTERNALUSERNAME)  
$ctx.Load($userInfo)  

# Get group by name and add the user
$group = $web.SiteGroups.GetByName($GROUPNAME) 
$addUser = $group.Users.AddUser($userInfo)  
$ctx.Load($addUser)  
$ctx.ExecuteQuery()  

# Paranoid check
$group = $web.SiteGroups.GetByName($GROUPNAME) 
$users = $group.Users  
$ctx.Load($users)  
$ctx.ExecuteQuery()  
foreach($user in $users){  
    Write-Host " " $user.Title  
}  
Share:

Me, myself and I

My Photo
I'm just another IT guy sharing his knowledge with all of you out there.
Wanna know more?