Iis

如何使用 Powershell 更新 IIS6 中的 HTTP 自定義標頭?

  • May 4, 2011

我有以下 Powershell 腳本,它使用 WMI 在 IIS 6 中更新網站上的 HTTP 自定義標頭。

該腳本似乎工作正常,沒有生成錯誤,並且生成的 $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

有一個鑄造錯誤,所以它不太正確,但希望這能為你指明正確的方向。

引用自:https://serverfault.com/questions/266221