SharepointADDExternalUsers.ps1
<#PSScriptInfo
.VERSION 1.0 .GUID 2d8f6138-efd3-4b5e-8a13-8e18a25fff43 .AUTHOR Vikas Sukhija .COMPANYNAME SysCloudpro.com .COPYRIGHT @SysCloudpro.com .TAGS .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA #> <# .DESCRIPTION Add external users in bulk to Sharepoint online Site Note: Sharepoint CSOM SDK is required Detail documentation : https://syscloudpro.com/2019/06/26/bulk-addition-of-external-users-to-sharepoint-online-site/ #> param ( [string]$siteUrl = $(Read-Host "Enter SITE URL on which External access is required"), [string]$userId = $(Read-Host "Enter Site Administrator id"), [string]$usersfile = $(Read-Host "Enter Users.txt file path"), $password = $(Read-Host "Enter Password" -AsSecureString), [string] $message = $(Read-Host "Enter Custom Welcome Message") ) function Write-Log { [CmdletBinding()] param ( [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [array]$Name, [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [string]$Ext, [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [string]$folder, [Parameter(ParameterSetName = 'Create',Position = 0)][switch]$Create, [Parameter(Mandatory = $true,ParameterSetName = 'Message')] [String]$Message, [Parameter(Mandatory = $true,ParameterSetName = 'Message')] [String]$path, [Parameter(Mandatory = $false,ParameterSetName = 'Message')] [ValidateSet('Information','Warning','Error')] [string]$Severity = 'Information', [Parameter(ParameterSetName = 'Message',Position = 0)][Switch]$MSG ) switch ($PsCmdlet.ParameterSetName) { "Create" { $log = @() $date1 = Get-Date -Format d $date1 = $date1.ToString().Replace("/", "-") $time = Get-Date -Format t $time = $time.ToString().Replace(":", "-") $time = $time.ToString().Replace(" ", "") foreach ($n in $Name) {$log += (Get-Location).Path + "\" + $folder + "\" + $n + "_" + $date1 + "_" + $time + "_.$Ext"} return $log } "Message" { $date = Get-Date $concatmessage = "|$date" + "| |" + $Message +"| |" + "$Severity|" switch($Severity){ "Information" {Write-Host -Object $concatmessage -ForegroundColor Green} "Warning" {Write-Host -Object $concatmessage -ForegroundColor Yellow} "Error" {Write-Host -Object $concatmessage -ForegroundColor Red} } Add-Content -Path $path -Value $concatmessage } } } function ProgressBar { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] $Title, [Parameter(Mandatory = $true)] [int]$Timer ) For ($i = 1; $i -le $Timer; $i++) { Start-Sleep -Seconds 1; Write-Progress -Activity $Title -Status "$i" -PercentComplete ($i /10 * 100) } } #################Check if logs folder is created######## $logpath = (Get-Location).path + "\logs" $testlogpath1 = Test-Path -Path $logpath if($testlogpath1 -eq $false) { ProgressBar -Title "Creating logs folder" -Timer 10 New-Item -Path (Get-Location).path -Name Logs -Type directory } #########################Variable and logs############### $log = Write-Log -Name "SharePointExternalInvite" -folder logs -Ext log $users = get-content $usersfile $pwd=$password Write-Log -Message "Script Start" -path $log #################Add csom and process request############ 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" $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userId,$pwd) $ctx.Credentials = $credentials $userList = New-Object "System.Collections.Generic.List``1[Microsoft.SharePoint.Client.Sharing.UserRoleAssignment]" ForEach($user in $users) { $userList.clear() Write-Log -Message "Processing ..........$user" -path $log $userRoleAssignment = New-Object Microsoft.SharePoint.Client.Sharing.UserRoleAssignment $userRoleAssignment.UserId = $user $userRoleAssignment.Role = [Microsoft.SharePoint.Client.Sharing.Role]::View $userList.Add($userRoleAssignment) try { Write-Log -Message "Sending invite to user $user" -path $log [Microsoft.SharePoint.Client.Sharing.WebSharingManager]::UpdateWebSharingInformation($ctx, $ctx.Web, $userList, $true, $message, $true, $true) $ctx.ExecuteQuery() } catch { $exception = $_.Exception Write-Log -Message $exception -path $log -Severity error } } Write-Log -Message "Script Finished" -path $log ######################################################################## |