Create Multiple SPGroups in all the subsites if the SPGroups doesn't exist using power Shell script

427 Views Asked by At

I need to create 2 SPGroups in the SubSites with Multiple AD Group members added to the group.

For Example,

  1. I have sub sites x,y,z under my Site
  2. I have groups Group A, Group B
  3. Members of Group A are Member1, Member2, Member3
  4. Members of Group B are Member1, Member2, Member3, Member4, Member5
  5. I need to create the groups in the sub sites if they doesn't exist.

Please let me know for any better approach.

I am trying to do that using Power shell.

$SPWeb = $Web.Read()
if ($SPWeb.SiteGroups[$GroupName] -ne $null){
   throw "Group $GroupName already exists!"   
}
if ($SPWeb.Site.WebApplication.UseClaimsAuthentication){
   $op = New-SPClaimsPrincipal $OwnerName -IdentityType WindowsSamAccountName
   $mp = New-SPClaimsPrincipal $MemberName -IdentityType WindowsSamAccountName
   $owner = $SPWeb | Get-SPUser $op
   $member = $SPWeb | Get-SPUser $mp
}
else {
   $owner = $SPWeb | Get-SPUser $OwnerName
   $member = $SPWeb | Get-SPUser $MemberName
}
$SPWeb.SiteGroups.Add($GroupName, $owner, $member, $Description)
$SPGroup = $SPWeb.SiteGroups[$GroupName]
$SPWeb.RoleAssignments.Add($SPGroup)
$SPWeb.Dispose()
1

There are 1 best solutions below

0
On
#Create an XML with all the details for the new Groups and menbers for the groups

<?xml version="1.0"?>
<Groups>
    <Group name="GroupA" description="Test GroupA" PermissionLevel="Contribute">
        <Users>
            <User>Domain\Member1</User>
            <User>Domain\Member2</User>
            <User>Domain\Member3</User>
        </Users>
     </Group>
<Group name="GroupB" description="Test GroupB" PermissionLevel="Read">
    <Users>
        <User>Domain\Member1</User>
        <User>Domain\Member2</User>
        <User>Domain\Member3</User>
        <User>Domain\Member4</User>
        <User>Domain\Member5</User>
    </Users>
</Group>

#Now create a script file with the below script

#Get Site and Web objects
$site = get-spsite https://portal/site/Test/ 

#Get all the sub sites under the web 
foreach($web in $site.allwebs) 
{ 
#Get XML file containing groups and associated users
$groupsXML = [xml] (Get-Content ("C:\Temp\Groups.XML"))

#Walk through each group node defined in the XML file
$groupsXML.Groups.Group | ForEach-Object {

    [string]$permissionLevel = $_.PermissionLevel

    #Check to see if SharePoint group already exists in the site collection
    if ($web.SiteGroups[$_.name] -eq $null)
    {
        #If the SharePoint group doesn't exist already - create it from the name and description values at the node
        $web.SiteGroups.Add($_.name, $web.CurrentUser, $null, $_.description)
        $newGroup = $web.SiteGroups[$_.name]
    }

    #Get SharePoint group from the site collection
    $group = $web.SiteGroups[$_.name]

    #Add the users defined in the XML to the SharePoint group
    $_.Users.User | ForEach-Object {
        $group.AddUser($_, "", "", "")      
    }

    $roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group)  
    $roleDefinition = $web.Site.RootWeb.RoleDefinitions[$permissionLevel]  
    $roleAssignment.RoleDefinitionBindings.Add($roleDefinition)

    $web.RoleAssignments.Add($roleAssignment)

    Write-Host "Group Name: "$group" Created at site: " $web.url
 }

 #Dispose of Web and Site objects
 $web.Dispose()
 $site.Dispose()   
 }