Назад | Перейти на главную страницу

Как я могу обновить настраиваемые заголовки HTTP в IIS6 с помощью Powershell?

У меня есть следующий сценарий Powershell, который использует WMI для обновления настраиваемых заголовков HTTP на веб-сайте в IIS 6.

Скрипт работает нормально, ошибок не возникает, а полученный объект $ website правильно показывает обновленное значение HttpCustomHeaders. Однако когда я смотрю на этот сайт в IIS, значения не обновлялись. Это также подтверждается посещением сайта и просмотром заголовков в Firebug - значения не сохраняются.

Есть идеи, что я делаю не так?

$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()

Я более чем открыт для альтернативного сценария, который обеспечивает лучший способ установки этого значения, поскольку выше предполагается, что уже есть хотя бы один заголовок.

Я также пробовал Set-WmiInstance -InputObject $website вместо того $website.Put() но это не имело значения.

В вашем примере кода значение сохраняется в метабазе, но сохраняется в корневой объект (w3svc / 1) вместо корневого vdir (w3svc / 1 / root).

Вот что будет работать вместо того, что у вас есть:

$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()

Однако еще одна вещь, на которую следует обратить внимание, это то, что это заменяет первое значение, а не добавляет новое значение. Сегодня у меня нет времени, чтобы понять, что делать с моим ограниченным опытом в PowerShell, но это будет что-то вроде:

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

$headers += $header

Произошла ошибка приведения, поэтому это не совсем верно, но, надеюсь, это указывает вам правильное направление.

Попробуйте сначала вывести текущее значение во время тестирования. Тогда вы сможете узнать, что правильно привязаны к тому сайту, которого ожидали. Например, для строки после $ headers = выполните Write-Host $ headers [0] .Keyname. Или сделайте Write-Host $ webSite.ServerComment.

По сути, сузьте его, чтобы убедиться, что у вас есть ручка на правильном веб-сайте.

Кроме того, сейчас у меня нет PowerShell так хорошо, как следовало бы, но можете ли вы отредактировать [0] и заставить его «добавить» запись? Готов поспорить, что вам нужно сделать что-то еще, чтобы фактически добавить значение в массив.