DSCResources/MSFT_xWebAppPoolDefaults/MSFT_xWebAppPoolDefaults.psm1
###################################################################################### # DSC Resource for IIS Server level Application Ppol Defaults # ApplicationHost.config: system.applicationHost/applicationPools # # only a limited number of settings are supported at this time # We try to cover the most common use cases # We have a single parameter for each setting ###################################################################################### data LocalizedData { # culture="en-US" ConvertFrom-StringData @' NoWebAdministrationModule=Please ensure that WebAdministration module is installed. SettingValue=Changing default value '{0}' to '{1}' ValueOk=Default value '{0}' is already '{1}' '@ } function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory)] [ValidateSet('Machine')] [string]$ApplyTo ) # Check if WebAdministration module is present for IIS cmdlets CheckIISPoshModule return @{ManagedRuntimeVersion = (GetValue -Path '' -Name 'managedRuntimeVersion') IdentityType = ( GetValue -Path 'processModel' -Name 'identityType')} } function Set-TargetResource { [CmdletBinding()] param ( [ValidateSet('Machine')] [parameter(Mandatory = $true)] [string]$ApplyTo, # in the future there will be another CLR version to be allowed [ValidateSet('','v2.0','v4.0')] [string]$ManagedRuntimeVersion, # TODO: we currently don't allow a custom identity [ValidateSet('ApplicationPoolIdentity','LocalService','LocalSystem','NetworkService')] [string]$IdentityType ) CheckIISPoshModule SetValue -Path '' -Name 'managedRuntimeVersion' -NewValue $ManagedRuntimeVersion SetValue -Path 'processModel' -Name 'identityType' -NewValue $IdentityType } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [ValidateSet('Machine')] [parameter(Mandatory = $true)] [string]$ApplyTo, [ValidateSet('','v2.0','v4.0')] [string]$ManagedRuntimeVersion, [ValidateSet('ApplicationPoolIdentity','LocalService','LocalSystem','NetworkService')] [string]$IdentityType ) CheckIISPoshModule if (!(CheckValue -Path '' -Name 'managedRuntimeVersion' -NewValue $ManagedRuntimeVersion)) { return $false } if (!(CheckValue -Path 'processModel' -Name 'identityType' -NewValue $IdentityType)) { return $false } return $true } ###################################################################################### # Helper Functions ###################################################################################### Function CheckValue([string]$path,[string]$name,[string]$newValue) { if (!$newValue) { # if no new value was specified, we assume this value is okay. return $true } $existingValue = GetValue -Path $path -Name $name if ($existingValue -ne $newValue) { return $false } else { $relPath = $path + '/' + $name Write-Verbose($LocalizedData.ValueOk -f $relPath,$newValue); return $true } } # some internal helper function to do the actual work: Function SetValue([string]$path,[string]$name,[string]$newValue) { # if the variable doesn't exist, the user doesn't want to change this value if (!$newValue) { return } $existingValue = GetValue -Path $path -Name $name if ($existingValue -ne $newValue) { if ($path -ne '') { $path = '/' + $path } Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/applicationPools/applicationPoolDefaults$path" -name $name -value "$newValue" $relPath = $path + '/' + $name Write-Verbose($LocalizedData.SettingValue -f $relPath,$newValue); } } Function GetValue([string]$path,[string]$name) { if ($path -ne '') { $path = '/' + $path } return Get-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/applicationPools/applicationPoolDefaults$path" -name $name } Function CheckIISPoshModule { # Check if WebAdministration module is present for IIS cmdlets if(!(Get-Module -ListAvailable -Name WebAdministration)) { Throw $LocalizedData.NoWebAdministrationModule } } Export-ModuleMember -Function *-TargetResource |