Accéder au contenu principal

SharePoint 2007: Forcer le mode compatibilité depuis IIS

 Dans un précédent message, nous avons vu la problématique de la maintenance d’anciennes infrastructures alors que le monde continue son avancée:

Pour rappel, le problème en question présenté ici pour du SharePoint 2007:

Ainsi la solution présentée fonctionne parfaitement, mais est plutôt radicale, car elle définie toutes les applications Web sous le même root domain avec ce mode.


Problème

Ainsi, si votre site SharePoint intranet en question fonctionne avec l’URL (http://sp.mymain.net) et que vous définissez cette option de compatibilité, elle deviendra active pour l’ensemble des applications Web ayant une URL du type (http://xxxx.mydomain.net).

L’impact après un certain nombre d’années vient avec les nouvelles applications qui ne supportent pas ce mode compatibilité et qui ont un design explosé avec ce paramètre.


Solution

Il existe une solution fournie par mon collègue (Michaël Staudenmann) permettant de forcer ce paramètre de compatibilité directement au niveau du serveur IIS. Ainsi, le serveur WEB fournit au navigateur de l’utilisateur quelle version d’IE il doit exécuter. Cela se fait avec l’option “X-UA-Compatible”.

Ce paramètre peut prendre différentes valeurs dont celle qui nous intéresse le plus pour SharePoint 2007 “IE=EmulateIE9”.

Cette mise en place doit se faire Application Web par Application Web et quelque soit la version d’IIS concernée.

Nous verrons en revanche dans nos exemples une configuration pour Windows 2008 R2.


Mise en place de la solution manuellement

Il faut lancer la console de gestion d’IIS et se placer au niveau de l’application WEB concernée. On trouve alors une icone “HTTP Response Headers”

image

On clique sur Add et ajoute le nom du header et sa valeur puis on valide par OK

image

Une fois ce paramètre entré le browser qui arrive sur ce site se voit forcé dans sa version d’engine à tourner.

Liens relatifs au sujet:


Attention avec les iFrame

Certains site SharePoint peuvent avoir des iFrames chargées et donc ceux-ci ne doivent pas se trouver avec le même paramêtre afin de ne pas créer un impact inverse pour eux.

De ce fait, il faut utiliser un second Header “X-Frame-Options” avec la valeur “SAMEORIGIN” suivant le même procéssus ci-dessus. On sera dans la configuration ci-dessous.

image

Liens relatifs au sujet:


Mise en place de la solution automatiquement

On peut résumer les configuration à appliquer dans le fichier XML suivant:


   
       
       
       
   

Mais, voyons comment faire cette action via PowerShell en se basant sur un script fourni en ligne par Avijit Sur:


param
(
   [string]$WebSiteName = $(throw "The web site name must be provided."),
   [string]$HeaderName = $(throw "The header name must be provided."),
   [string]$HeaderValue = $(throw "The header vale must be provided.")
)
#cls
# Initialize the default script exit code.
$exitCode = 0

[System.Reflection.Assembly]::LoadFrom( "C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll" ) | Out-Null
try
{
    $iisVersion = Get-ItemProperty "HKLM:\software\microsoft\InetStp";
    write-host ">IIS Version", $iisVersion.MajorVersion, $iisVersion.MinorVersion
   
    if ($iisVersion.MajorVersion -eq 7)
    {
        if ($iisVersion.MinorVersion -ge 5)
        {
            Import-Module WebAdministration;
        }           
        else
        {
            if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration";})) {
                Add-PSSnapIn WebAdministration;
            }
        }
    }
    
    $PSPath =  'MACHINE/WEBROOT/APPHOST/' + $WebSiteName
    
    Remove-WebConfigurationProperty -PSPath $PSPath -Name . -Filter system.webServer/httpProtocol/customHeaders -AtElement @{name =$HeaderName }
             
    $iis = new-object Microsoft.Web.Administration.ServerManager
    $config = $iis.GetWebConfiguration($WebSiteName) #i.e. "Default Web Site"
    $httpProtocolSection = $config.GetSection("system.webServer/httpProtocol")
    $customHeadersCollection = $httpProtocolSection.GetCollection("customHeaders")
 
    $addElement = $customHeadersCollection.CreateElement("add")
    $addElement["name"] = $HeaderName
    $addElement["value"] = $HeaderValue
 
    $customHeadersCollection.Add($addElement)
 
    $iis.CommitChanges() 
    write-host $iis
}
Catch [System.Exception]
{
    $exitCode = 1
    write-host "Error" $_.Exception.Message
}
# Indicate the resulting exit code to the calling process.
if ($exitCode -gt 0)
{
    "`nERROR: Operation failed with error code $exitCode."
}
"`nDone."
exit $exitCode

#SOURCE: https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Add-custom-HTTP-728eba24
# &"\Set-HTTP-Response-Header.ps1" "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"



   
       
       
       
   

#SPWebApp1
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-Frame-Options" "SAMEORIGIN"

#CentralAdmin
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-Frame-Options" "SAMEORIGIN"

#>


Le fichier PowerShell peut être sauvegardé dans le répertoire voulu avec le nom “Set-HTTP-Response-Header.ps1”. Il suffit alors de lancer une commande PowerShell depuis le répertoire en question et exécuter les commandes:

#SPWebApp1
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-Frame-Options" "SAMEORIGIN"

#CentralAdmin
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-Frame-Options" "SAMEORIGIN"

On se trouvera avec les deux applications Web (SharePoint site et Centrale Admin) mise à jour pour supporter ces nouveaux paramètres.

Il ne vous reste plus qu’à adapter ces exécutions à votre configuration et exécuter ces commandes sur tous les serveurs WEB de vos fermes SharePoint 2007.


Conclusion

Cette solution n’est pas magique, mais vous permet de laisser les postes de travail fonctionner selon leurs besoins et non les forcer pour une solution qui n’est plus ammenée à évoluer.

Ceci vous laissera alors du temps pour préparer votre migration.

Romelard Fabrice [MBA Risk Management]

Commentaires

Posts les plus consultés de ce blog

Série de vidéos sur le montage d'une serre horticole ACD

 Episode 1: Préparation du terrain Episode 2: Montage de la serre en elle même Episode 3: Finalisation avec le montage électrique alimentant la serre Bon visionnage Fab

Présentation des outils utiles pour l'entretien de ses haies vives

Afin de gérer les haies vives, il est nécessaire d'avoir recourt à un matériel adapté. Les solutions à batteries sont bien adaptées pour un usage personnel avec des dimensions raisonnables. Ainsi dans mon cas précis, j'utilise les outils suivants de la Gamme Ryobi 18V ONE+ électroportatif: Petit taille-haies simple mais efficace -  RYOBI OHT1855R Un modèle plus puissant qui fonctionne très bien -  RYOBI RY18HTX60A Pour les parties hautes de vos haies, voici un outil très utile -  RYOBI OPT1845 Enfin lorsque vous devez élaguer certains arbres ou certaines partie hautes de vos haies, ce dernier outil est très utile -  RYOBI OPP1820 Ces outils font parti maintenant de mon arsenal de base pour maintenir notre maison chaque saison de taille. Fab

Série de Videos sur Home Assistant intégrant la production Photovoltaïque

 Un certain nombre de vidéos sont en ligne pour intégrer sa production photovoltaïque dans Home Assistant en partant de la base. Installation de Home Assistant: On peut ensuite intégrer les composant des Micro-Onduleurs Enphase, mais aussi les batteries Enphase: Ou encore le composant de contrôle Ecojoko: Ce qui permet alors de faire des comparaisons entre les valeurs capturées: Des videos seront encore publiés dans les prochaines semaines sur différents aspects de cette solution. Fab