Construindo a entrada do Active Directory usando o PowerShell trabalha no IIS 6, mas não IIS 7
-
19-09-2019 - |
Pergunta
A seguinte linha de PowerShell trabalha com o IIS 6 instalado:
$service = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC")
No entanto, com o IIS 7, ele lança o seguinte erro, a menos que o serviço de função de compatibilidade de gerenciamento do IIS 6 esteja instalado:
out-lineoutput : Exception retrieving member "ClassId2e4f51ef21dd47e99d3c952918aff9cd": "Unknown error (0x80005000)"
Meu objetivo é modificar os httpcustomheaders:
$service.HttpCustomHeaders = $foo
Como posso fazer isso de uma maneira compatível com o IIS-7?
Obrigado
Solução
Existem várias maneiras de fazer isso usando APPCMD
e c#/vb.net/javascript/vbscript:
Para fazer isso usando PowerShell e o Microsoft.Web.Administration
conjunto:
[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()
Isso resultará em um <location>
caminho em applicationHost.config
com o seguinte:
<location path="Default Web Site">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Custom-Name" value="MyCustomValue" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Para fazer isso no PowerShell usando o novo 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
Isso vai configurar um <location>
caminho em applicationHost.config
com o seguinte:
<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>
Os back-ticks no final de cada linha indicam uma continuação da linha. Os dois exemplos dados acima foram testados no Windows 2008 Server SP2.
Outras dicas
Agora existe um IIS 7 PowerShell Snap-In:
http://learn.iis.net/page.aspx/428/getting-started-with-the-iis-70-powershell-snap-in/