Search code examples
powershelliisconfigurationdsc

Configure IIS with DSC


How one would configure static\dynamic http compression using xWebAdministration DSC module? As far as I understand DSC doesn't offer a direct way to configure those, but maybe xWebConfigKeyValue can do that? If so, have you got some examples?

And also this:

New-WebHandler -Name "svc-ISAPI-4.0_64bit" -Path "*.svc" -Verb 'GET,POST' -Modules IsapiModule
New-WebHandler -Name "svc-Integrated-4.0" -Path "*.svc" -Verb 'GET,POST' -Modules 'System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

With xIisHandler? but how?

Solution:

$mimeTypesDynamic = @(
    @{mimeType='text/*'; enabled='True'},
    @{mimeType='message/*'; enabled='True'},
    @{mimeType='application/x-javascript'; enabled='True'},
    @{mimeType='application/json'; enabled='True'},
    @{mimeType='application/json; charset=utf-8'; enabled='True'},
    @{mimeType='application/xml" enabled'; enabled='True'},
    @{mimeType='application/xml; charset=utf-8'; enabled='True'},
    @{mimeType='*/*'; enabled='false'}
)

$mimeTypesStatic = @(
    @{mimeType='text/*'; enabled='True'},
    @{mimeType='message/*'; enabled='True'},
    @{mimeType='application/x-javascript'; enabled='True'},
    @{mimeType='application/atom+xml'; enabled='True'},
    @{mimeType='application/xaml+xml'; enabled='True'},
    @{mimeType='*/*'; enabled='false'}
)

...


Script configureMime {
    SetScript = {
        Remove-WebHandler -Name "svc-Integrated-4.0" -WarningAction SilentlyContinue
        Remove-WebHandler -Name "svc-ISAPI-4.0_64bit"
        Clear-WebConfiguration -filter "/system.webServer/httpCompression/dynamicTypes" -pspath IIS: -WarningAction SilentlyContinue
        Clear-WebConfiguration -filter "/system.webServer/httpCompression/staticTypes" -pspath IIS: -WarningAction SilentlyContinue
        foreach ($mimeD in $using:mimeTypesDynamic) {
            Add-WebConfiguration "/system.webServer/httpCompression/dynamicTypes" -pspath IIS: -value $mimeD
            New-Item c:\1 -ItemType Directory -ea 0
        }
        foreach ($mimeS in $using:mimeTypesStatic) {
            Add-WebConfiguration "/system.webServer/httpCompression/staticTypes" -pspath IIS: -value $mimeS
        }
        New-WebHandler -Name "svc-ISAPI-4.0_64bit" -Path "*.svc" -Verb 'GET,POST' -Modules IsapiModule
        New-WebHandler -Name "svc-Integrated-4.0" -Path "*.svc" -Verb 'GET,POST' -Modules 'System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
    }
    TestScript = { 
        $types = Get-WebConfigurationProperty -Filter "/system.webServer/httpCompression" -name dynamicTypes
        $types.Collection.Length -eq 8
    }
    GetScript = { return @{ 'Result' = "Mimi Configuration" } }   
}

Solution

  • As far as I can see from the source code for xWebAdministration it looks like xWebConfigKeyValue only supports appsettings-values and xIISHandler only accepts predefined handlers. So you would have to use script-resource or create your own resources to configure these settings (or find some third-party modules).

    To get you started, here are samples to modify dynamic and static compression on the global level:

    #Enable dynamicCompression global (remember to install dynamic compression feature first)
    Set-WebConfigurationProperty -Filter "/system.webServer/urlCompression" -PSPath IIS:\ -Name doDynamicCompression -Value "true"
    
    #Enable staticCompression global
    Set-WebConfigurationProperty -Filter "/system.webServer/urlCompression" -PSPath IIS:\ -Name doStaticCompression -Value "true"