如何使用Powershell更新IIS6中的HTTP自定义标头?

我有以下Powershell脚本,它使用WMI来更新IIS 6中网站上的HTTP自定义标头。

该脚本似乎工作正常,没有产生错误,并由此产生的$网站对象正确显示更新的HttpCustomHeaders值。 但是,当我在IIS中查看该网站时,值尚未更新。 这也是通过访问该网站并在Firebug中查看标题来validation的 – 值不会被保存。

任何想法我做错了什么?

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

我不止是打开一个替代脚本,它提供了一个更好的方式来设置这个值,上面假设已经有至less一个头文件了。

我也试过Set-WmiInstance -InputObject $website而不是$website.Put()但没有任何区别。

您的代码示例将该值保存到元数据库,但保存到根对象(w3svc / 1)而不是root 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 

有一个铸造错误,所以这是不正确的,但希望你指向正确的方向。

尝试输出当前值,而您正在testing。 那么你可以知道你正确地绑定到你期望的站点。 例如,对于$ headers =之后的行,执行Write-Host $ headers [0] .Keyname。 或者做一个写主机$ webSite.ServerComment。

基本上,缩小范围以确保您在正确的网站上有处理。

此外,我现在不是现在PowerShell,我应该在这一点上,但你可以编辑[0],并“添加”一个条目? 我敢打赌,你需要做一些其他的事情来为数组添加一个值。