2009-11-10 18 views
3

La ligne suivante de PowerShell fonctionne avec IIS 6 installé:Construire l'entrée Active Directory à l'aide PowerShell fonctionne dans IIS 6 mais pas IIS 7

$service = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC") 

Cependant, avec IIS 7, il jette l'erreur suivante à moins que la gestion IIS 6 service de rôle de compatibilité est installé:

out-lineoutput : Exception retrieving member "ClassId2e4f51ef21dd47e99d3c952918aff9cd": "Unknown error (0x80005000)" 

Mon but est de modifier les HttpCustomHeaders:

$service.HttpCustomHeaders = $foo 

Comment puis-je faire cela d'une manière compatible IIS-7?

Merci

+0

Ceci est un comportement prévu - tout le point de la gestion de la compatibilité avec IIS 6 est de vous permettre de gérer IIS 7 avec des scripts IIS 6. –

+0

Je suis d'accord, cependant, il est préférable d'utiliser l'espace de noms MWA ou le composant logiciel enfichable PS. L'utilisation d'ADSI via System.DirectoryServices peut polluer le fichier applicationHost.config avec des solutions de rechange. Par exemple, les objets AboCustomerMapper sont créés lors de la manipulation de scriptmaps. Ceux-ci peuvent causer des maux de tête à long terme. – Kev

Répondre

3

Il y a plusieurs façons de le faire en utilisant APPCMD et C#/VB.NET/JavaScript/VBScript :

Custom Headers (IIS.NET)

Pour ce faire, en utilisant PowerShell et l'assemblage Microsoft.Web.Administration:

[Reflection.Assembly]::Load("Microsoft.Web.Administration, Version=7.0.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35") 

$serverManager = new-object Microsoft.Web.Administration.ServerManager 

$siteConfig = $serverManager.GetApplicationHostConfiguration() 
$httpProtocolSection = $siteConfig.GetSection("system.webServer/httpProtocol", "Default Web Site") 
$customHeadersCollection = $httpProtocolSection.GetCollection("customHeaders") 
$addElement = $customHeadersCollection.CreateElement("add") 
$addElement["name"] = "X-Custom-Name" 
$addElement["value"] = "MyCustomValue" 
$customHeadersCollection.Add($addElement) 
$serverManager.CommitChanges() 

Cela se traduira par un chemin <location> en applicationHost.config avec les éléments suivants:

<location path="Default Web Site"> 
    <system.webServer> 
     <httpProtocol> 
      <customHeaders> 
       <add name="X-Custom-Name" value="MyCustomValue" /> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</location> 

Pour ce faire, dans PowerShell en utilisant le nouveau IIS 7 PowerShell Snap-In :

add-webconfiguration ` 
    -filter /system.webServer/httpProtocol/customHeaders ` 
    -location "Default Web Site" ` 
    -pspath "IIS:" ` 
    -value @{name='X-MyHeader';value='MyCustomHeaderValue'} ` 
    -atindex 0 

Cela configurera un <location> chemin dans applicationHost.config de ce qui suit:

<location path="Default Web Site"> 
    <system.webServer> 
     <httpProtocol> 
      <customHeaders> 
       <clear /> 
       <add name="X-MyHeader" value="MyCustomHeaderValue" /> 
       <add name="X-Powered-By" value="ASP.NET" /> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</location> 

l'arrière-tiques à la fin de chaque ligne indique une continuation de la ligne. Les deux exemples donnés ci-dessus ont été testés sur Windows 2008 Server SP2.