Using powershell to create new Office365 groups with specific permissions

%3CLINGO-SUB%20id%3D%22lingo-sub-1259487%22%20slang%3D%22en-US%22%3EUsing%20powershell%20to%20create%20new%20Office365%20groups%20with%20specific%20permissions%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1259487%22%20slang%3D%22en-US%22%3E%3CP%3EI%20have%20a%20PowerShell%20question%20were%20my%20developer%20cannot%20find%20the%20answer.%3C%2FP%3E%3CP%3EWe%20have%20made%20a%20script%20to%20automatically%20setup%20libraries%20and%20assign%20users%20%2F%20groups%20with%20specific%20permissions%20to%20these%20libraries.%3C%2FP%3E%3CP%3EHowever%20the%20libraries%20and%20permissions%20are%20created%20successfully%20but%20the%3CSTRONG%3E%20Office%20365%20groups%20are%3C%2FSTRONG%3E%20%3CSTRONG%3Enot%20assigned%3C%2FSTRONG%3E.%20Office%20365%20users%20are%20successfully%20assigned%20including%20their%20permissions.%3C%2FP%3E%3CP%3E%3CSTRONG%3EAfter%20investigating%20this%20issue%3A%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3EWe%20discovered%20only%20SharePoint%20groups%20can%20be%20assigned%20and%20NOT%20the%20Office%20365%20groups.%3C%2FP%3E%3CP%3EI%20do%20not%20want%20to%20assign%20SharePoint-%20or%20nest%20groups.%3C%2FP%3E%3CP%3ECurrently%20the%20script%20(group%20part)%20looks%20like%20this.%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%23Assign%20list%20permissions%20to%20the%20group%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20if%20(%24GroupName%20-ne%20%22%22)%20%7B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%23Explode%20Groups%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24GroupNames%20%3D%20%24GroupName.Split('%2C')%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24GroupPermissions%20%3D%20%24GroupPermission.Split('%2C')%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24groups%20%3D%20%24Web.SiteGroups%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.Load(%24groups)%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.ExecuteQuery()%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20foreach%20(%24group%20in%20%24groups)%20%7B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20if%20(%24GroupNames.Contains(%24group.Title))%20%7B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24NameIndex%20%3D%20%24GroupNames.IndexOf(%24group.Title)%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20foreach%20(%24roleDef%20in%20%24roleDefs)%20%7B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20if%20(%24GroupPermissions%5B%24NameIndex%5D.Equals(%24roleDef.Name))%20%7B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.Load(%24roleDef)%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.ExecuteQuery()%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24RoleDB%20%3D%20New-Object%20Microsoft.SharePoint.Client.RoleDefinitionBindingCollection(%24Ctx)%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.Load(%24RoleDB)%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.ExecuteQuery()%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24RoleDB.Add(%24roleDef)%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.Load(%24List.RoleAssignments.Add(%24group%2C%20%24RoleDB))%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24List.Update()%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%24Ctx.ExecuteQuery()%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20Write-Host%20-f%20Green%20%22%60tAdded%20%24GroupPermissions%5B%24NameIndex%5D%20permission%20to%20%24GroupName%20group%20in%20%24LibraryName.%20%22%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3EI%20found%20something%20with%20unified%20groups%3A%3C%2FP%3E%3CP%3E%23%20Get%20the%20membership%20and%20ownership%20information%20of%20an%20Office%20365%20group%2Fall%20the%20Office%20365%20groups%20in%20your%20tenant%3C%2FP%3E%3CP%3E%24UserCredential%20%3D%20Get-Credential%3C%2FP%3E%3CP%3E%24Session%20%3D%20New-PSSession%20-ConfigurationName%20Microsoft.Exchange%20-ConnectionUri%20%3CA%20href%3D%22https%3A%2F%2Foutlook.office365.com%2Fpowershell-liveid%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20%20noopener%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Foutlook.office365.com%2Fpowershell-liveid%2F%3C%2FA%3E%20-Credential%20%24UserCredential%20-Authentication%20Basic%20-AllowRedirection%3C%2FP%3E%3CP%3EImport-PSSession%20%24Session%20-DisableNameChecking%3C%2FP%3E%3CP%3EGet-UnifiedGroup%20-Identity%20%22officekundig%22%3C%2FP%3E%3CP%3EHowever%20my%20developer%20told%20me%20he%20cannot%20use%20this%20piece%20of%20code%20inside%20the%20script.%3C%2FP%3E%3CP%3EPlease%20be%20so%20kind%20and%20let%20me%20know%20what%20Powershell%20can%20be%20used%20to%20assign%20Office%20365%20groups%20with%20a%20specific%20role%20to%20a%20new%20library.%3C%2FP%3E%3C%2FLINGO-BODY%3E
Highlighted
New Contributor

I have a PowerShell question were my developer cannot find the answer.

We have made a script to automatically setup libraries and assign users / groups with specific permissions to these libraries.

However the libraries and permissions are created successfully but the Office 365 groups are not assigned. Office 365 users are successfully assigned including their permissions.

After investigating this issue:

We discovered only SharePoint groups can be assigned and NOT the Office 365 groups.

I do not want to assign SharePoint- or nest groups.

Currently the script (group part) looks like this.

              #Assign list permissions to the group

                if ($GroupName -ne "") {

                    #Explode Groups

                    $GroupNames = $GroupName.Split(',')

                    $GroupPermissions = $GroupPermission.Split(',')

                    $groups = $Web.SiteGroups

                    $Ctx.Load($groups)

                    $Ctx.ExecuteQuery()

                    foreach ($group in $groups) {

                        if ($GroupNames.Contains($group.Title)) {                          

                            $NameIndex = $GroupNames.IndexOf($group.Title);

                            foreach ($roleDef in $roleDefs) {

                                if ($GroupPermissions[$NameIndex].Equals($roleDef.Name)) {

                                    $Ctx.Load($roleDef)

                                    $Ctx.ExecuteQuery()

                                    $RoleDB = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($Ctx)

                                    $Ctx.Load($RoleDB)

                                    $Ctx.ExecuteQuery()

                                    $RoleDB.Add($roleDef)

           

                                    $Ctx.Load($List.RoleAssignments.Add($group, $RoleDB))

                                    $List.Update()

                                    $Ctx.ExecuteQuery()

                                    Write-Host -f Green "`tAdded $GroupPermissions[$NameIndex] permission to $GroupName group in $LibraryName. "

                                }

                            }

                           

                        }

                    }

                }

I found something with unified groups:

# Get the membership and ownership information of an Office 365 group/all the Office 365 groups in your tenant

$UserCredential = Get-Credential

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

Import-PSSession $Session -DisableNameChecking

Get-UnifiedGroup -Identity "officekundig"

However my developer told me he cannot use this piece of code inside the script.

Please be so kind and let me know what Powershell can be used to assign Office 365 groups with a specific role to a new library.

0 Replies