none
SharePoint Einladungen CSOM in Gruppe RRS feed

  • Allgemeine Diskussion

  • 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


    • Bearbeitet sändy Mittwoch, 10. August 2016 16:01
    • Typ geändert Teodora MilushevaModerator Freitag, 12. August 2016 05:32 Die Threads die keine Aktivität haben, werden als Diskussion geändert. Das machen wir, um die Suche in dem Forum zu verbessern. Sie können den Typ jede Zeit ändern.
    • Typ geändert Denniver ReiningMVP Dienstag, 23. August 2016 13:09 ....
    • Verschoben Denniver ReiningMVP Dienstag, 23. August 2016 13:12 Vielleicht kann hier jemand helfen.
    • Typ geändert Teodora MilushevaModerator Montag, 19. September 2016 12:51 Leider, hat niemand weiter geholfen.
    Mittwoch, 10. August 2016 13:10

Alle Antworten