0

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()
Martin K.
  • 1,050
  • 8
  • 19
  • To suggest better approaches you should show your approach. – Martin K. Jun 26 '14 at 20:10
  • I am trying to do that using power shell. But no idea if it is for multiple users. Can be done by loading from XML. But problem is how to check that for the multiple subsites – Vinod Kumar Jun 26 '14 at 20:47

1 Answers1

0
#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()   
 }