Hallo Zusammen,
ich habe das untenstehende Skript. Es ermöglicht es via SharePoint Online Einladungen an externe User zu verschicken.
Auf der Weboberfläche ist es möglich, diese externen User direkt einer Berechtigungsgruppe zuzuordnen. Mit dem Skript sind aber nur rudimentäre Berechtigungen (View, Edit, Owner) möglich. Weiss jemand, wie man diese direkt den Berechtigungsgruppe zuweist?
Falls schon jemand fragen möchte: Nein, es ist nicht möglich den Benutzer am Ende einfach mit Add-SPOUser der Gruppe zuzuordnen, da es sich erstmal nur um eine Einladung handelt, und noch nicht um einen registrieren Benutzer.
Function Add-SharePointSiteExternalUser { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateScript({[system.uri]::IsWellFormedUriString($_,[System.UriKind]::Absolute)})] [string]$SiteURL, [Parameter(Mandatory=$true)] [ValidateNotNull()] [System.Management.Automation.PSCredential]$Credential, [Parameter(Mandatory=$true,ValueFromPipeline=$True)] [net.mail.mailaddress[]]$User, [Parameter(Mandatory=$true)] [ValidateSet("None","View","Edit","Owner")] [string]$Permission, [Parameter(Mandatory=$false)] [string]$Message = $null, [Parameter(Mandatory=$false)] [switch]$SendNotificationEmail = $true ) begin{ $StatusOK = $True Write-Verbose "Initializing SharePoint Client Libraries" try{ $loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") $loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") } catch{ Write-Error "Failed to load SharePoint Client Libraries." $StatusOK = $False break } Write-Verbose "Initializing SharePoint context object." try{ $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL) $SharePointCreds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Credential.UserName, $Credential.Password) $ctx.Credentials = $SharePointCreds $SharingManager = [Microsoft.SharePoint.Client.Sharing.WebSharingManager] } catch{ Write-Error "Failed to initialize SharePoint context object. Ensure you have the correct permissions on the sharepoint site." $StatusOK = $False break } switch ($Permission){"View" {$SetPermission = [Microsoft.SharePoint.Client.Sharing.Role]::View}"Edit" {$SetPermission = [Microsoft.SharePoint.Client.Sharing.Role]::Edit}"Owner"{$SetPermission = [Microsoft.SharePoint.Client.Sharing.Role]::Owner} } } process{ if(!$StatusOK){return} $User | ForEach-Object { $CurUser = $_.Address.ToString() Write-Host "Granting '$CurUser' '$Permission' access to '$SiteURL'." $userList = New-Object "System.Collections.Generic.List``1[Microsoft.SharePoint.Client.Sharing.UserRoleAssignment]" $userRoleAssignment = New-Object Microsoft.SharePoint.Client.Sharing.UserRoleAssignment $userRoleAssignment.UserId = $CurUser $userRoleAssignment.Role = $SetPermission $userList.Add($userRoleAssignment) try{ $res = $SharingManager::UpdateWebSharingInformation($ctx, $ctx.Web, $userList, $SendNotificationEmail, $message, $true, $true) $ctx.ExecuteQuery() $Success = $res.Status $StatusMessage = $res.message $InvitationLink = $res.InvitationLink } catch{ write-error "Error granting '$CurUser' '$Permission' access to '$SiteURL'." $Success = $False $StatusMessage = "Error granting '$CurUser' '$Permission' access to '$SiteURL'." } $ObjProperties = @{ SiteURL = $SiteURL Permission = $Permission User = $CurUser Success = $Success StatusMessage = $StatusMessage } $OutObj = new-object psobject -Property $ObjProperties Write-Output $OutObj } } } $Users = "test@contoso.com" $Message = "Hallo! Dies ist meine Einladung" $SPSite = "https://tenant.sharepoint.com" Add-SharePointSiteExternalUser -SiteURL $SPSite -Credential $Credential -User $Users -Permission View -Message $Message -SendNotificationEmail:$true