2012-02-10 11 views
5

Meta: Actualizar un encabezado de host existente para un sitio IIS7.5 con PowerShellActualización de encabezado de host en IIS con Powershell

Problema: Set-WebBinding requiere el nombre del sitio que no tengo. Aunque tengo el HostHeader.

Escenario: Tengo varios sitios en IIS. Algunos de ellos tienen un encabezado de host con una cadena en particular que quiero cambiar.

Site1 - site1.stuff.domain.net 
Site2 - site2.stuff.domain.net 
Site3 - site3.domain.net 

quiero cambiar todos los sitios que tienen .stuff en sus cabeceras.

Estoy usando Get-WebBinding para obtener una lista de todos los sitios y sus enlaces. Luego recorro y compruebo si bindingInformation contiene .stuff. Para modificar la cadena de la forma que me plazca y luego ir a actualizar la cabecera con

Set-WebBinding -HostHeader $originalHeader -SetProperty HostHeader -Value $newHeader 

Al parecer, sin embargo, usted tiene que tener el nombre del sitio con el fin de utilizar Set-WebBinding, a diferencia de Get-WebBinding que le permite obtener una unión basada en la HostHeader (Get-WebBinding -HostHeader $someValue). ¿Hay alguna manera de usar Set-WebBinding sin especificar el Name de un sitio? ¿Hay alguna manera de que pueda obtener el nombre del sitio Get-WebBinding? ¿Hay una alternativa al Set-WebBinding? ¿O hay una mejor manera de hacer lo que estoy tratando de hacer?

Respuesta

4

seguirlo:

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{ 
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.' 
    Set-WebConfigurationProperty -Filter $_.ItemXPath -PSPath IIS:\ -Name Bindings -Value @{protocol='http';bindingInformation=$NewHeader} 
} 
+0

Agradable, muy agradable. – Kev

+0

Desafortunadamente, esto no funciona donde hay enlaces múltiples por sitio. En este caso $ _. El valor de la propiedad ItemXPath es el mismo, por lo que solo el último enlace sobrevivirá. – esteewhy

1

Modificado respuesta de Shay para soportar múltiples enlaces.

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{ 
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.' 
    Set-WebConfigurationProperty -Filter ($_.ItemXPath + "/bindings/binding[@protocol='http' and @bindingInformation='" + $_.bindingInformation + "']") -PSPath IIS:\ -Name bindingInformation -Value $NewHeader 
} 
Cuestiones relacionadas