DSCResources/MSFT_xIisMimeTypeMapping/MSFT_xIisMimeTypeMapping.psm1
###################################################################################### # DSC Resource for IIS Server level MIME Type mappings ###################################################################################### data LocalizedData { # culture="en-US" ConvertFrom-StringData @' NoWebAdministrationModule=Please ensure that WebAdministration module is installed. AddingType=Adding MIMEType '{0}' for extension '{1}' RemovingType=Removing MIMEType '{0}' for extension '{1}' TypeExists=MIMEType '{0}' for extension '{1}' already exist TypeNotPresent=MIMEType '{0}' for extension '{1}' is not present as requested TypeStatusUnknown=MIMEType '{0}' for extension '{1}' is is an unknown status '@ } ###################################################################################### # The Get-TargetResource cmdlet. # This function will get the Mime type for a file extension ###################################################################################### function Get-TargetResource { [OutputType([Hashtable])] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$Extension, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$MimeType, [ValidateSet('Present', 'Absent')] [Parameter(Mandatory)] [string]$Ensure ) # Check if WebAdministration module is present for IIS cmdlets CheckIISPoshModule $mt = GetMapping -extension $Extension -type $MimeType if ($mt -eq $null) { return @{ Ensure = 'Absent' Extension = $null MimeType = $null } } else { return @{ Ensure = 'Present' Extension = $mt.fileExtension MimeType = $mt.mimeType } } } ###################################################################################### # The Set-TargetResource cmdlet. # This function will add or remove a MIME type mapping ###################################################################################### function Set-TargetResource { param ( [ValidateSet('Present', 'Absent')] [Parameter(Mandatory)] [string]$Ensure = 'Present', [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$Extension, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$MimeType ) CheckIISPoshModule [string]$psPathRoot = 'MACHINE/WEBROOT/APPHOST' [string]$sectionNode = 'system.webServer/staticContent' $mt = GetMapping -extension $Extension -type $MimeType if ($mt -eq $null -and $Ensure -eq 'Present') { # add the MimeType Add-WebConfigurationProperty -pspath $psPathRoot -filter $sectionNode -name '.' -value @{fileExtension="$Extension";mimeType="$MimeType"} Write-Verbose($LocalizedData.AddingType -f $MimeType,$Extension); } elseif ($mt -ne $null -and $Ensure -eq 'Absent') { # remove the MimeType Remove-WebConfigurationProperty -pspath $psPathRoot -filter $sectionNode -name '.' -AtElement @{fileExtension="$Extension"} Write-Verbose($LocalizedData.RemovingType -f $MimeType,$Extension); } } ###################################################################################### # The Test-TargetResource cmdlet. # This will test if the given MIME type mapping has the desired state, Present or Absent ###################################################################################### function Test-TargetResource { [OutputType([System.Boolean])] param ( [Parameter(Mandatory)] [ValidateSet('Present', 'Absent')] [string]$Ensure = 'Present', [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$Extension, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [String]$MimeType ) [bool]$DesiredConfigurationMatch = $true; CheckIISPoshModule $mt = GetMapping -extension $Extension -type $MimeType if (($mt -eq $null -and $Ensure -eq 'Present') -or ($mt -ne $null -and $Ensure -eq 'Absent')) { $DesiredConfigurationMatch = $false; } elseif ($mt -ne $null -and $Ensure -eq 'Present') { # Already there Write-Verbose($LocalizedData.TypeExists -f $MimeType,$Extension); } elseif ($mt -eq $null -and $Ensure -eq 'Absent') { # TypeNotPresent Write-Verbose($LocalizedData.TypeNotPresent -f $MimeType,$Extension); } else { $DesiredConfigurationMatch = $false; Write-Verbose($LocalizedData.TypeStatusUnknown -f $MimeType,$Extension); } return $DesiredConfigurationMatch } Function CheckIISPoshModule { # Check if WebAdministration module is present for IIS cmdlets if(!(Get-Module -ListAvailable -Name WebAdministration)) { Throw $LocalizedData.NoWebAdministrationModule } } Function GetMapping([string]$extension,[string]$type) { [string]$filter = "system.webServer/staticContent/mimeMap[@fileExtension='" + $extension + "' and @mimeType='" + $type + "']" return Get-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter $filter -Name . } # FUNCTIONS TO BE EXPORTED Export-ModuleMember -function Get-TargetResource, Set-TargetResource, Test-TargetResource |