使用 Powershell 更新 IIS 中的主机标头

发布于 2025-01-04 15:12:17 字数 974 浏览 0 评论 0原文

目标:使用 powershell 更新 IIS7.5 站点的现有主机标头

问题Set-WebBinding 需要我不知道的站点名称没有。不过我确实有 HostHeader。

场景:我在 IIS 中有多个站点。其中一些有一个主机标头,其中包含我想要更改的特定字符串。

Site1 - site1.stuff.domain.net
Site2 - site2.stuff.domain.net
Site3 - site3.domain.net

我想更改标题中包含 .stuff 的所有网站。

我使用 Get-WebBinding 来获取所有网站及其绑定的列表。然后我循环遍历它们并检查 bindingInformation 是否包含 .stuff。我按照自己的意愿修改字符串,然后去更新标头,

Set-WebBinding -HostHeader $originalHeader -SetProperty HostHeader -Value $newHeader

但显然,您必须拥有站点的名称才能使用 Set-WebBinding,这与 Get-WebBinding 不同> 它允许您获取基于 HostHeader 的绑定 (Get-WebBinding -HostHeader $someValue)。有没有办法在不指定站点的 Name 的情况下使用 Set-WebBinding ?有没有办法从 Get-WebBinding 获取网站名称?有没有 Set-WebBinding 的替代方案?或者有更好的方法来做我想做的事情吗?

Goal: Update an existing host header for an IIS7.5 site with powershell

Problem: Set-WebBinding requires the name of the site which I don't have. I do have the HostHeader though.

Scenario: I have multiple sites in IIS. Some of them have a host header with a particular string that I want to change.

Site1 - site1.stuff.domain.net
Site2 - site2.stuff.domain.net
Site3 - site3.domain.net

I want to change all sites that have .stuff in their headers.

I'm using Get-WebBinding to get a list of all sites and their bindings. I then loop through them and check if bindingInformation contains .stuff. I modify the string how I please and then go to update the header with

Set-WebBinding -HostHeader $originalHeader -SetProperty HostHeader -Value $newHeader

Apparently though, you have to have the site's name in order to use Set-WebBinding, unlike Get-WebBinding which allows you to get a binding based on the HostHeader (Get-WebBinding -HostHeader $someValue). Is there a way to use Set-WebBinding without specifing the Name of a site? Is there a way I can get the site's name from Get-WebBinding? Is there an alternative to Set-WebBinding? Or is there a better way to do what I'm trying to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那支青花 2025-01-11 15:12:17

尝试一下:

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.'
    Set-WebConfigurationProperty -Filter $_.ItemXPath -PSPath IIS:\ -Name Bindings -Value @{protocol='http';bindingInformation=$NewHeader}
}

Give this a try:

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.'
    Set-WebConfigurationProperty -Filter $_.ItemXPath -PSPath IIS:\ -Name Bindings -Value @{protocol='http';bindingInformation=$NewHeader}
}
森林迷了鹿 2025-01-11 15:12:17

修改 Shay 的答案以支持多个绑定。

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.'
    Set-WebConfigurationProperty -Filter ($_.ItemXPath + "/bindings/binding[@protocol='http' and @bindingInformation='" + $_.bindingInformation + "']") -PSPath IIS:\ -Name bindingInformation -Value $NewHeader
}

Modified Shay's answer to support multiple bindings.

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.'
    Set-WebConfigurationProperty -Filter ($_.ItemXPath + "/bindings/binding[@protocol='http' and @bindingInformation='" + $_.bindingInformation + "']") -PSPath IIS:\ -Name bindingInformation -Value $NewHeader
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文