Wednesday, October 22, 2014

Bulk creation of Sharepoint Site column ,Content types ,list and permission groups



Here is the GitHub Link  where I have upload the CSV and power shell scripts which can be used for bulk creation of Sharepoint Site column,Content types,List and permissions,

All you need to do is enter the values in the respective CSV which already consists of some sample values.


https://gallery.technet.microsoft.com/Create-Sharepoint-81bba042#content

Thursday, October 9, 2014

Sharepoint break role inherentence and add custom permission in sharepoint library/List through Powershell

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null) {
Write-Host "Loading SharePoint Powershell Snapin"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}



function AddGroupsToList($groupName,$permissionLevel)
{
    $Group = $web.SiteGroups[$groupName]
    $GroupAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($Group)
    #Get the permission levels to apply to the new groups
    $RoleDefinition = $web.Site.RootWeb.RoleDefinitions[$permissionLevel]
    #Assign the groups the appropriate permission level
    $GroupAssignment.RoleDefinitionBindings.Add($RoleDefinition)
    #Add the group to the site with the permission level
    $list.RoleAssignments.Add($GroupAssignment)    
    $list.Update()
}


$site = Get-SPSite "http://webapplication/sites/RECMRepository/"
$web = $site.RootWeb



#Break Roleinherentence for "Public Documents" list
Write-Host  -foreground "green" "Breaking Role inherentence for the list - Public Documents"
$list = $web.Lists["Public Documents"]
$list.BreakRoleInheritance($false)
#Add Groups to the list with permission levels assigned
AddGroupsToList "Group1" "Full Control"
AddGroupsToList "Group2" "Contribute"
AddGroupsToList "Group3" "Read"


Note:Breaking role inherentence of either site or library or list with Parameter "False" will give you with clean slate no groups from top level will be copied hence I am adding the groups which I need later,

But if the parameter is "True" it will copy the groups from top level,in the case you may need to delete the unwanted groups from the list
 

Create Sharepoint Site Group and role definition through powershell

Below code to be used in powershell file


function createSiteGroups($groupName,$groupOwner,$groupDescription,$permissionLevel,$users)
{
    Write-Host  -foreground "green"  "Creating Sharepoint group -" $groupName
    $web.SiteGroups.Add($groupName, $groupOwner, $groupOwner, $groupDescription)
    $Group = $web.SiteGroups[$groupName]
    $Group.AllowMembersEditMembership = $true
    $Group.Update()
    Write-Host  -foreground "green"  "Creating role assignment for the group -" $groupName
    $GroupAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($Group)

    #Get the permission levels to apply to the new groups
    $RoleDefinition = $web.Site.RootWeb.RoleDefinitions[$permissionLevel]
    #Assign the groups the appropriate permission level
    $GroupAssignment.RoleDefinitionBindings.Add($RoleDefinition)
    #Add the group to the site with the permission level
    $web.RoleAssignments.Add($GroupAssignment)
    Write-Host  -foreground "green"  "Creation of group and role assignment completed successfully for the group -" $groupName
    #Adding users to the group
    Write-Host  -foreground "green"  "Adding users to the group -" $groupName
    $arrayUsers = $users.split(",")
    foreach($user in $arrayUsers)
        {
           if($user -ne "")
             {
               $adUser = $web.Site.RootWeb.EnsureUser($user)
               $Group.AddUser($adUser)
              }
        }
}


You can call the function as below

#Creating Sharepoint security Groups
#create group "Group1 "
$groupName = "Group1"
$groupOwner = $web.Site.Owner
$groupDescription =  "test Group"
$permissionLevel = "Full Control"
$users = "domain\user1,Domain\user2"
createSiteGroups $groupName  $groupOwner $groupDescription $permissionLevel $users



 

Sharepoint create List and attach Content Type to Library or List through powershell

Below code to be used in Powershell file


$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null) {
Write-Host "Loading SharePoint Powershell Snapin"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

function AddContentTypes($web,$libraryName,$libraryDescription,$libraryTemplate,$customContentTypes)
{
   
    #Adding CT
    Write-Host -foreground "green" "Adding Content Types to the Library - " $libraryName
    $docLib = $web.Lists[$libraryName]
    $docLib.ContentTypesEnabled = "True"
    $docLib.update()
    $customContentTypeArray = $customContentTypes.Split(",")
    foreach($customContentType in $customContentTypeArray)
       {
         $customCT = $web.ContentTypes[$customContentType]
         $docLib.ContentTypes.Add($customCT)
         Write-Host -foreground "green" "Content Type -"$customContentType "Added to the List"
       }
    $docLib.update()

}



$site = Get-SPSite "http://Webapplication:777"
$web = $site.RootWeb

$libraryName = "Config"
$libraryDescription = ""
$libraryTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary;
Write-Host -foreground "green" "Creating Library - " $libraryName "...."
# Adding Library
$web.Lists.Add($libraryName,$libraryDescription,$libraryTemplate);
$web.Update();

$customContentTypes = "CT1,CT2,CT3"
AddContentTypes $web $libraryName $libraryDescription $libraryTemplate $customContentTypes



$web.Dispose()
$site.Dispose()

Read-host "Press Enter key to exit ...."



To create site column and Content type use the Link
 

Create sharepoint Site column and Content Types through powershell

Use the below code in Powershell file




$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null) {
Write-Host "Loading SharePoint Powershell Snapin"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}
$site = Get-SPSite http://WebApplication:777
$web = $site.RootWeb 

$fieldXML = '<Field Type="Text" ID="{20152dbc-7793-46cb-bc0d-5dd98b0aa1a4}" StaticName="Col1" Name=" Col1" DisplayName=" Col1"
            Description="A document classification ." Required="TRUE" MaxLength="255"
            Group="RDM Site Columns"  ></Field>'
write-host -foreground "green" "Adding Site Column"
$web.Fields.AddFieldAsXml($fieldXML) 

$fieldXML =  '<Field Type="Note" ID="{2808ba7f-78a9-4930-8840-385a18e85b53}" StaticName="Col2" Name=" Col2" DisplayName=" Col2"
        Description="The type of business conducted at a site." Required="FALSE"  NumLines="6" RichText="TRUE"
        Group="RDM Site Columns"  ></Field>'
write-host -foreground "green" "Adding Site Column"
$web.Fields.AddFieldAsXml($fieldXML) 

$fieldXML = '<Field Type="Choice" ID="{ce7f74d7-fc8c-4844-85a9-903e208e68d2}" StaticName="Col3" Name=" Col3" DisplayName=" Col3"
        Description="The status of a complete location." Required="TRUE" Group="EICM Site Columns" >   
<CHOICES>
      <CHOICE>Active</CHOICE>
      <CHOICE>InActive</CHOICE>
      <CHOICE>Pending</CHOICE>
    </CHOICES>
    <Default>Pending</Default>
  </Field>'
write-host -foreground "green" "Adding Site Column"
$web.Fields.AddFieldAsXml($fieldXML) 
 

Write-Host -foreground "green" "Creating Content Type-CT1 ...."
$ctypeName = “CT1”
$ctypeParent = $web.availablecontenttypes["Document"]
$ctype = new-object Microsoft.SharePoint.SPContentType($ctypeParent, $web.contenttypes, $ctypeName)
$ctype.Group = "CT"
$ctype.Description = ""
$web.contenttypes.add($ctype)
 

$field = $web.fields.getfield(“Col1”)
$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.add($fieldLink)
$field = $web.fields.getfield(“Col2”)
$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.add($fieldLink)
$field = $web.fields.getfield(“Col3”)
$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.add($fieldLink)
$ctype.update()
 

If u need to delete any field in child CT which got inherted from Parent CT then you can use the below code 

 

Write-Host -foreground "green" "Creating Content Type-CT2 ...."
$ctypeName = “CT2”
$ctypeParent = $web.availablecontenttypes["CT1"]
$ctype = new-object Microsoft.SharePoint.SPContentType($ctypeParent, $web.contenttypes, $ctypeName)
$ctype.Group = "EICM Content Types"
$ctype.Description = ""
$web.contenttypes.add($ctype)
 

$field = $web.fields.getfield(“col1”)
$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.Delete($fieldLink.Id)
$ctype.update()