function Configure-WebSitePermissions {
<#
.DESCRIPTION
This function configures the Permissions for a given web server folder.
.EXAMPLE
Configure-WebSitePermissions -WebSiteName TestSite -PermissionList "Source", "Script"
.EXTERNALHELP
None.
.FORWARDHELPTARGETNAME
None.
.INPUTS
System.String and System.Array.
.LINK
None.
.NOTES
None.
.OUTPUTS
None.
.PARAMETER WebSiteName
A string for the name of the website to be modified.
.PARAMETER PermissionList
A list of strings used to specify an IIS folder permissions.
.SYNOPSIS
Set IIS folder permissions.
#>
param(
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[String]
$WebSiteName,
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[ValidateSet("Execute","NoRemoteWrite","Read","Script","Source","Write")]
[Array]
$PermissionList
)
if(!Test-Path IIS:\sites\$WebSiteNames) {
Write-Error "$WebSiteName does not exist.";
} else {
# Combine entries into a single string for parsing.
$PermissionString = $null;
for($i = 0; $i -lt $PermissionList.Length; $i++) {
if($i -lt $PermissionList.Length - 1) {
$PermissionString += $PermissionList[$i] + ','
} else {
$PermissionString += $PermissionList[$i];
}
}
# Switch it IIS Provider
Write-Host "Switching to IIS provider.";
Push-Location IIS:\sites\$WebSiteName;
# Checking access policy
Write-Host "Checking current access policy configuration.";
$ConfigurationPolicy = get-webconfigurationproperty -filter /system.webserver/handlers -name accesspolicy;
if($ConfigurationPolicy -eq $PermissionString) {
Write-Host "Current access policy configuration matches requested access policy configuration. No changes made.";
} else {
# Configure access policy
Write-Host "Setting access policy to: $PermissionList.";
set-webconfigurationproperty -filter /system.webserver/handlers -name accesspolicy -value $PermissionString
}
# Restore original location
Write-Host "Restoring original location.";
Pop-Location
}
}