# 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