Como posso atualizar os cabeçalhos personalizados de HTTP no IIS6 usando o Powershell?

1

Eu tenho o seguinte script Powershell que usa o WMI para atualizar os cabeçalhos personalizados HTTP em um site no IIS 6.

O script parece funcionar bem, sem gerar erros, e o objeto $ website resultante mostra corretamente o valor HttpCustomHeaders atualizado. Quando olho para esse site no IIS, no entanto, os valores não foram atualizados. Isso também é verificado visitando o site e observando os cabeçalhos no Firebug - os valores não são salvos.

Alguma idéia do que estou fazendo errado?

$website = Get-WmiObject -Class IIsWebServerSetting -Namespace "root\microsoftiisv2" -ComputerName $computerName -filter "ServerComment = '$websiteName'" -Authentication 6

$headers = $webSite.HttpCustomHeaders
$headers[0].Keyname = 'P3P: policyref="http://somewebsite.com/p3p.xml", CP="IDC DSP COR CUR DEV PSA IVA IVD CONo HIS TELo OUR DEL UNRo BUS UNI"'
$headers[0].Value = $null
$website.HttpCustomHeaders = $headers
$website.Put()

Estou mais do que aberto a um script alternativo que fornece uma maneira melhor de definir esse valor, conforme acima, pressupõe que já exista pelo menos um cabeçalho presente.

Eu também tentei Set-WmiInstance -InputObject $website em vez de $website.Put() , mas isso não fez diferença.

    
por Duffman 04.05.2011 / 16:16

2 respostas

2

Seu exemplo de código salva o valor na metabase, mas salva no objeto raiz (w3svc / 1) em vez do vdir raiz (w3svc / 1 / root).

Veja o que funcionará no lugar do que você tem:

$website = Get-WmiObject -Class IIsWebServerSetting -Namespace "root\microsoftiisv2" -ComputerName $computerName -filter "ServerComment = '$websiteName'" -Authentication 6

$path = $website.name + '/root'
$vdir = [wmi]"root\MicrosoftIISv2:IIsWebVirtualDirSetting='$path'"

$headers = $vdir.HttpCustomHeaders
$headers[0].Keyname = 'P3P: policyref="http://somewebsite.com/p3p.xml", CP="IDC DSP COR CUR DEV PSA IVA IVD CONo HIS TELo OUR DEL UNRo BUS UNI"'
$headers[0].Value = $null
$vdir.HttpCustomHeaders = $headers
$vdir.Put()

No entanto, mais uma coisa a observar é que isso substitui o primeiro valor em vez de adicionar um novo valor. Estou sem tempo hoje para descobrir como lidar com meu limitado conhecimento em PowerShell, mas vai ser algo como:

$bindingClass = [wmiclass]'root\MicrosoftIISv2:HttpCustomHeader'
$newheader = $bindingClass.CreateInstance()
$newheader.KeyName = "New Value"
$newheader.Value = $null

$headers += $header

Há um erro de transmissão, por isso não está certo, mas espero que isso o direcione na direção certa.

    
por 05.05.2011 / 00:24
0

Tente enviar o valor atual primeiro enquanto estiver testando. Então você pode saber que você ligou corretamente ao site que você esperava. Por exemplo, para a linha depois de $ headers =, faça um $ headers [0] .Keyname do Write-Host. Ou faça um $ webSite.ServerComment do Write-Host.

Basicamente, reduza-o para garantir que você tenha uma alça no site correto.

Além disso, agora eu não faço o PowerShell tão bem quanto deveria, mas você pode editar [0] e "adicionar" uma entrada? Aposto que você precisa fazer outra coisa para realmente adicionar um valor a um array.

    
por 04.05.2011 / 20:58