Private/Set-FPControlPermissions.ps1
function Set-FPControlPermissions { <# .SYNOPSIS Apply Folder and File Permissions Controls .DESCRIPTION Process Configuration Control: ACL Permissions on Files, Folders .PARAMETER DataSet XML data from control file import .EXAMPLE Set-FPControlPermissions -DataSet $xmldata #> param ( [parameter(Mandatory = $True)]$DataSet ) Write-FPLog "--------- permissions assignments: begin ---------" foreach ($priv in $DataSet) { $device = $priv.device $collection = $priv.collection $privPath = $priv.path $privPrinc = $priv.principals $privRights = $priv.rights if ($privPath.StartsWith('HK')) { $privType = 'registry' } else { $privType = 'filesystem' } Write-FPLog "device................ $device" Write-FPLog "collection............ $collection" Write-FPLog "priv path............. $privPath" Write-FPLog "priv principals....... $privPrinc" Write-FPLog "priv rights........... $privRights" if (Test-Path $privPath) { switch ($privType) { 'filesystem' { switch ($privRights) { 'full' { $pset = '(OI)(CI)(F)'; break } 'modify' { $pset = '(OI)(CI)(M)'; break } 'read' { $pset = '(OI)(CI)(R)'; break } 'write' { $pset = '(OI)(CI)(W)'; break } 'delete' { $pset = '(OI)(CI)(D)'; break } 'readexecute' { $pset = '(OI)(CI)(RX)'; break } } # switch Write-FPLog "permission set........ $pset" if (-not $TestMode) { Write-FPlog "command: icacls `"$privPath`" /grant `"$privPrinc`:$pset`" /T /C /Q" try { icacls "$privPath" /grant "$privPrinc`:$pset" /T /C /Q } catch { Write-FPLog -Category "Error" -Message $_.Exception.Message } } else { Write-FPLog "TESTMODE: icacls `"$privPath`" /grant `"$privPrinc`:$pset`" /T /C /Q" } break } 'registry' { Write-FPLog "registry permissions feature is not yet fully baked" break } } # switch } else { Write-FPLog -Category "Error" -Message "" } } # switch Write-FPLog "--------- permissions assignments: finish ---------" } |