Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 7025

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 2162

Deprecated: Hook imagify_allow_picture_tags_for_webp is deprecated since version 2.2! Use imagify_allow_picture_tags_for_nextgen instead. in /www/collab365_296/public/wp-includes/functions.php on line 5758
Creating SharePoint folders via PowerShell - Collab365
Deprecated: strstr(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1145

Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1152

Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1155

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1162

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1165

Deprecated: strstr(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1145

Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1152

Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1155

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1162

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/collab365_296/public/wp-includes/functions.php on line 1165

Warning: Undefined array key "url" in /www/collab365_296/public/wp-content/plugins/thrive-visual-editor/thrive-dashboard/inc/smart-site/classes/class-tvd-smart-shortcodes.php on line 85

2015-12-24

I know that there are lot of sites and scripts where you can find how to create bunch of folders and set permissions on them via PowerShell. But I was not able to find all in one place. For instance, how to create folder, how to add AD user or group with certain permission level, how to set permission inheritance on some folder etc.

Therefore I wrote couple of functions which will hopefully help you to configure your folder structure, as well as necessary permissions. Best thing is that you can create .csv file and create load of folders and permissions at once.

<#
.Synopsis
   This function creates folder in SharePoint list
.DESCRIPTION
   This function creates folder in SharePoint list
.EXAMPLE
    Create-SPFolder -WebURL http://mysite.com/subsite -listName Listname -RootFolderURL Listname -FolderName MyFirstFolder -Verbose
.EXAMPLE
    Import-Csv C:\temp\folderpermission.csv | Create-SPfolder
#>
function Create-SPFolder
{
    [CmdletBinding()]

    Param
    (
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string]$WebURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=1)]
        [string]$listName,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=2)]
        [string]$RootFolderURL,
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=2)]
        [string]$FolderName
    )

    Begin{
        Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
        }
    Process
        {
        $website = Get-SPWeb $WebURL
        $list = $website.Lists[$listname]

        If ($website.GetFolder("$RootFolderURL/$foldername").Exists){
            Write-Verbose "SharePoint folder already exists. Skiping...."
            }
        
        else{
            $folder = $list.AddItem($RootFolderURL, [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, "$folderName")
            $folder.Update()
            Write-Verbose "SharePoint folder $foldername created on location $RootFolderURL/$foldername"
            }
        }
    End
        {
        $website.Dispose()
        }
    }    


<#

.Synopsis
   This function sets permissions to SharePoint folder

.DESCRIPTION
   This function sets permissions to SharePoint folder; it breaks inheritance and add AD user with defined permission level

.EXAMPLE1

   Set-SPFolderUserUniquePermission -WebURL http://mysite.com/subsite -listName Listname -FolderURL "Listname/MyFirstFolderName" -PermissionLevel "Contribute" -ADUser AD\MyAccount -Verbose

.EXAMPLE2

   Set-SPFolderUserUniquePermission http://mysite.com/subsite "Listname" "Listname/MyFirstFolderName" -PermissionLevel "Read" AD\MyAccount -Verbose

.EXAMPLE3

    Import-Csv C:\temp\folderpermission.csv | Set-SPFolderUserUniquePermission

.EXAMPLE4
   
   $csv = Import-Csv C:\temp\folderpermission.csv

foreach ($line in $csv){
    
    Set-SPFolderUserUniquePermission -WebURL $line.weburl -listName $line.listName -RootFolderURL $line.FolderUrl -PermissionLevel $line.PermissionLevel -ADUser $line.ADUser -Verbose
    
    }
#>
function Set-SPFolderUserUniquePermission
    {
    [CmdletBinding()]

    Param
    (
     
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string]$WebURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=1)]
        [string]$listName,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=2)]
        [string]$FolderURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=3)]
        [ValidateSet("Full Control", "Design", "Contribute", "Read")]
        [string]$PermissionLevel,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=4)]
        [string]$ADUser

    )

    Begin
        {
        Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
        }

    Process
        {
        $website = Get-SPWeb $WebURL
        $list = $website.Lists | Where-Object{$_.title -eq $listName}
        $SPfolder = $list.Folders | Where-Object {$_.url -eq $FolderURL}
        $group = $website.SiteUsers[$ADuser];  


        $spFolder.BreakRoleInheritance($false);
        $roleAssignment = New-Object microsoft.sharepoint.SPRoleAssignment($group)
        $roleDefinition = $website.RoleDefinitions[$PermissionLevel]
        $roleAssignment.RoleDefinitionBindings.Add($roleDefinition)  
        $spFolder.RoleAssignments.Add($roleAssignment)       
        $spFolder.Update()   
        }
    End
        {
        $website.Dispose()
        }
    }


<#
.Synopsis
   This function set SharePoint folder permission to inherit from parent.

.DESCRIPTION
   This function set SharePoint folder permission to inherit from parent.

.EXAMPLE1

   Set-SPFolderInheritPermission -WebURL http://mysite.com/subsite -listName Listname -RootFolderURL "Listname/MyFirstFolderName"


.EXAMPLE2

   $csv = Import-Csv C:\temp\folderpermission.csv

foreach ($line in $csv){
    
    $FolderUrl = $line.RootFolderUrl + '/' + $line.FolderName
    Set-SPFolderInheritPermission -WebURL $line.WebUrl -listName $line.ListName -FolderURL $FolderUrl -Verbose
    }
#>
function Set-SPFolderInheritPermission
{
    [CmdletBinding()]

    Param
    (
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string]$WebURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=1)]
        [string]$listName,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=2)]
        [string]$FolderURL
    )

    Begin
        {
        Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
        }

    Process
        {

        $website = Get-SPWeb $WebURL
        $list = $website.Lists | Where-Object{$_.title -eq $listName}
        $SPfolder = $list.Folders | Where-Object {$_.url -eq $FolderURL}
        

        $spFolder.ResetRoleInheritance()
        $spFolder.Update()
        }
    End
        {
        $website.Dispose()
        }
    }


<#

.Synopsis
   This function sets permissions to SharePoint folder

.DESCRIPTION
   This function sets permissions to SharePoint folder; it breaks inheritance and add SharePoint group with defined permission level

.EXAMPLE1

   Set-SPFolderGroupUniquePermission -WebURL http://mysite.com/subsite -listName Listname -RootFolderURL "Listname/MyFirstFolderName" -PermissionLevel "Contribute" -SPGroup "HR" -Verbose

.EXAMPLE2

   Set-SPFolderGroupUniquePermission http://mysite.com/subsite "Listname" "Listname/MyFirstFolderName" -PermissionLevel "Read" "HR" -Verbose

.EXAMPLE3

   Import-Csv C:\temp\folderpermission.csv |  Set-SPFolderGroupUniquePermission

.EXAMPLE4
   
   $csv = Import-Csv C:\temp\folderpermission.csv

foreach ($line in $csv){
    
    Set-SPFolderGroupUniquePermission -WebURL $line.weburl -listName $line.listName -FolderURL $line.FolderUrl -PermissionLevel $line.PermissionLevel -Group $line.SPGroup -Verbose
    
    }
#>
function Set-SPFolderGroupUniquePermission
    {
    [CmdletBinding()]

    Param
    (
     
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string]$WebURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=1)]
        [string]$ListName,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=2)]
        [string]$FolderURL,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=3)]
        [ValidateSet("Full Control", "Design", "Contribute", "Read")]
                   
        [string]$PermissionLevel,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=4)]
        [string]$SPGroup

    )

    Begin
        {
        Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
        }

    Process
        {

        $website = Get-SPWeb $WebURL
        $list = $website.Lists | Where-Object{$_.title -eq $ListName}
        $SPfolder = $list.Folders | Where-Object {$_.url -eq $FolderURL}
        $group = $website.SiteGroups[$SPGroup]; 

        $spFolder.BreakRoleInheritance($false);
        $roleAssignment = New-Object microsoft.sharepoint.SPRoleAssignment($group)
        $roleDefinition = $website.RoleDefinitions[$PermissionLevel]
        $roleAssignment.RoleDefinitionBindings.Add($roleDefinition)  
        $spFolder.RoleAssignments.Add($roleAssignment)       
        $spFolder.Update()   
        }
    End
        {
        $website.Dispose()
        }
    }

Import-Csv C:\temp\folderpermission.csv | Create-SPFolder

Import-Csv C:\temp\folderpermission.csv | Set-SPFolderInheritPermission

foreach ($line in $csv){
    
    if($line.SPGroup){
        Set-SPFolderGroupUniquePermission -WebURL $line.WebUrl -listName $line.ListName -FolderURL $FolderUrl -PermissionLevel $line.PermissionLevel -SPGroup $line.SPGroup -Verbose
        Write-host $line.ADUser $line.SPGroup $FolderUrl
        }
    elseif($line.ADUser){
        Set-SPFolderUserUniquePermission -WebURL $line.WebUrl -listName $line.ListName -FolderURL $FolderUrl -PermissionLevel $line.PermissionLevel -User $line.ADUser -Verbose
        Write-host $line.ADUser $line.SPGroup $FolderUrl
        }
    else{
        Write-Verbose "No security groups to configure. Skiping...."
        }
    }


   

 

(Visited 803 times, 1 visits today)

About the author 

Krsto Savic

Summit Bundle

Get 200+ hours of Microsoft 365 Training for 27$!

Master Office 365, Power Platform & SharePoint & Teams With 200+ Hours Of Training Videos and 108 Ebooks in the Collab365 Academy. This offer is insane and is only available for a limited period.