POWERSHELL – ADDING CUSTOM HTTP RESPONSE HEADERS

Recently I needed to add a few custom HTTP Response Headers to a Website on an on-premise IIS, and as I will need to do this for multiple servers, I wanted to run a PowerShell script instead of doing it manually on each server.

I really thought that I would be able to quickly find a script to perform this task, but turns out it wasn’t that straight forward. It took me quite a while to get this working (I am no PowerShell expert).

Here is what my script is doing:

  • Create an array of custom object that will contain the Name and Value for the custom headers
  • Get the IIS Configuration for the Website
  • For each item of my array
    • Check if the header name already doesn’t exist in the configuration, and then create it
    • Commit the IIS changes (this is necessary otherwise an error is thrown that the object is in read-only mode)

You don’t really need to create an array and loop through the values, if you want to simplify your code, you can just copy & paste the New-IISConfigCollectionElement instruction multiple times, and this should work as well.

Below is the final script, all you need to do is change Website name and Custom Headers (name and value):

123456789101112131415161718192021$Website= "My Website"Import-ModuleIISAdministration$CustomHeaders= @(    [pscustomobject]@{Name="X-XSS-Protection"; Value="1; mode=block"}    [pscustomobject]@{Name="X-Content-Type-Options"; Value="nosniff"}    [pscustomobject]@{Name="Content-Security-Policy"; Value="default-src 'self'"}    [pscustomobject]@{Name="Referrer-Policy"; Value="strict-origin"}    [pscustomobject]@{Name="Feature-Policy"; Value="fullscreen 'self'"})$CustomHeaders| ForEach-Object{    $IISConfigSection= Get-IISConfigSection-SectionPathsystem.webServer/httpProtocol-CommitPath$Website| Get-IISConfigCollection-CollectionName"customHeaders";    $Header= Get-IISConfigCollectionElement-ConfigCollection$IISConfigSection-ConfigAttribute@{ 'name'= $.Name }    if(!$Header){        New-IISConfigCollectionElement-ConfigCollection$IISConfigSection-ConfigAttribute@{"name"=$.Name; "value"=$_.Value;};        $IIS= Get-IISServerManager        $IIS.CommitChanges();    }}

POWERSHELL – ADDING CUSTOM HTTP RESPONSE HEADERS

https://www.youtube.com/@powerappsninja

Leave a Comment

Your email address will not be published. Required fields are marked *