private775 icon

SharePoint: read security setting from CSV and apply them

private775 | PRO | 04/23/15 08:01:19 PM UTC | 0 ⭐ | 717 👁️ | Never ⏰ | []
PowerShell |

4.42 KB

|

None

|

0 👍

/

0 👎

# CSV (from EXCEL)
#Group Name,Folder Url,U1,U2,U3,U4,U5,U6,U7,U8,U9,U10,U11,U12
#Food Services,/sites/Policies/ACME1/Food Services,dtlynnf,,,,,,,,,,,
#Lab Services,/sites/Policies/ACME1/Lab Services,lbkathys,issimone,,,,,,,,,,
#Laundry and Linen,/sites/Policies/ACME1/Laundry,lnyvonne,lnkay,,,,,,,,,,
 
$w = Get-SPWeb http://acmeportal.acme.bm/sites/Policies
$ownerLogin = "acme\pinky"
$csvPath = "C:\temp\20150409\newGroups.csv"
 
$roleRead = "Read"
$roleContributeNotDelete = "Contribute not Delete"
$roleContribute = "Contribute"
 
$groupPoliciesVisitors = "Policies Visitors"
$groupPoliciesMembers = "Policies Members"
 
$grpPoliciesVisitors = $w.SiteGroups[$groupPoliciesVisitors]
if($grpPoliciesVisitors -eq $null){
    throw "Error"
}
 
$grpPoliciesMembers = $w.SiteGroups[$groupPoliciesMembers]
if($grpPoliciesMembers -eq $null){
    throw "Error"
}
 
$roleDefRead = $w.RoleDefinitions[$roleRead]
if($roleDefRead -eq $null){
    throw "Error"
}
 
$roleDefContribute = $w.RoleDefinitions[$roleContribute]
if($roleDefContribute -eq $null){
    throw "Error"
}
 
$roleDefContributeNotDelete = $w.RoleDefinitions[$roleContributeNotDelete]
if($roleDefContributeNotDelete -eq $null){
    throw "Error"
}
 
 
$lists = @( "ACME1", "ACME2")
 
 
function createGroups(){
    $recs = Import-Csv -Path $csvPath
    $owner = $w.EnsureUser($ownerLogin)
 
    foreach($rec in $recs){
        $grName = $rec."Group Name"
        $w.SiteGroups.Add($grName, $owner, $null, '')
        $g = $w.SiteGroups[$grName]
        Write-Host "Created group: $($g.Name)"
        foreach($i in 1..12){
            $memberX = $rec."U$($i)"
            if($memberX -ne $null -and $memberX -ne ""){
                $uu = Get-SPUser -Web $w -Identity "acme\$($memberX)" -ErrorAction SilentlyContinue
                if($uu -ne $null){
                    $g.AddUser($uu)
                    Write-Host "Added user: $($uu.DisplayName)"
                }
            }
        }
        $g.Update()
    }
}
 
function addSecurity(){
    $recs = Import-Csv -Path $csvPath
    $owner = $w.EnsureUser($ownerLogin)
 
    foreach($listName in $lists){
        $l = $w.Lists.TryGetList($listName)
        if($l -ne $null){
            setListSecurity $l
        }
    }
 
    foreach($rec in $recs){
        $grName = $rec."Group Name"
        $g = $w.SiteGroups[$grName]
        if($g -eq $null){
            write-host "Group `"$($grName)`" does not exist"
        } else {
            write-host "Processing group $($grName)"
            $fldUrl = $rec."Folder Url"
            if($fldUrl -ne $null -and $fldUrl -ne ""){
                $fld = $w.GetFolder($fldUrl)
                if($fld.Exists){
                    setFolderSecurity $fld $g
                } else {
                    Write-Host $("Folder `"" + $rec."Folder Url" + "`" does not exist")
                }
            } else {
                Write-Host "Folder not specified"
            }
        }
    }
}
 
function setListSecurity($l){
    $l.BreakRoleInheritance($false)
    $roleAssigment = new-object Microsoft.SharePoint.SPRoleAssignment($grpPoliciesMembers)
    $roleAssigment.RoleDefinitionBindings.Add($roleDefContribute)
    $l.RoleAssignments.Add($roleAssigment)
 
    $roleAssigment = new-object Microsoft.SharePoint.SPRoleAssignment($grpPoliciesVisitors)
    $roleAssigment.RoleDefinitionBindings.Add($roleDefRead)
    $l.RoleAssignments.Add($roleAssigment)
}
 
function setFolderSecurity($fld, $grp){
    # add admins
    setFolderSecurityLevel $fld $grpPoliciesMembers $roleDefContribute
    
    # add viewers
    setFolderSecurityLevel $fld $grpPoliciesVisitors $roleDefRead
    
    # add contributor not delete
    setFolderSecurityLevel $fld $grp $roleDefContributeNotDelete
 
}
 
function setFolderSecurityLevel($fld, $grp, $permLevel){
    #$fld.ServerRelativeUrl
    #$grp.Name
    #$permLevel.Name
    
    $item = $fld.Item
    if($item -eq $null){
        Write-Host "No item"
    } else {
        $item.BreakRoleInheritance($false)
 
        $roleAssigment = new-object Microsoft.SharePoint.SPRoleAssignment($grp)
        $roleAssigment.RoleDefinitionBindings.Add($permLevel)
        $item.RoleAssignments.Add($roleAssigment)
    }
}
 
function cleanSecurity() {
    foreach($listName in $lists){
        $l = $w.Lists.TryGetList($listName)
        if($l -ne $null){
            Write-Host -NoNewline "Processing list $($listName): "
            $l.ResetRoleInheritance()
 
            $query = new-object  -TypeName "Microsoft.SharePoint.SPQuery"
            $query.ViewAttributes = "Scope=`"RecursiveAll`""
            $items = $l.GetItems($query)
 
            $c = 0
            foreach($item in $items){
                $c++
                if($item.HasUniqueRoleAssignments){
                    $item.ResetRoleInheritance()
                    Write-Host -NoNewline "+"
                }
                if(($c % 100) -eq 0){
                    Write-Host -NoNewline "."
                }
            }
            Write-Host " done"
        }
    }
}
 
# run cleanSecurity and then addSecurity

Comments