Iis
如何使用 Powershell 更新 IIS6 中的 HTTP 自定義標頭?
我有以下 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
有一個鑄造錯誤,所以它不太正確,但希望這能為你指明正確的方向。