如何使用Get-WebBinding选择没有主机头的绑定

时间:2019-05-08 16:45:30

标签: powershell iis

我具有以下绑定:

enter image description here

我可以选择具有主机头api的绑定,如下所示:

enter image description here

但是,我无法选择没有主机头的绑定。如果我通过""$NUL,我仍然可以获得所有绑定:

enter image description here

我发现一种可能的解决方案是使用Where-Object过滤列表,如下所示:

enter image description here

是否有更好的方法来执行此操作,这将使我获得默认绑定而没有主机头,而没有其他任何东西?谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎真的无法显式地使用Get-WebBinding来获得 just 一个没有主机头的文件。

Get-WebBinding返回所有绑定。 From the docs,我们唯一可用于过滤的参数是:

  • -Name-我们已经在用来指定网站名称
  • -IPAddress-在这种情况下不适用
  • -Port-只能真正指定443,这无济于事
  • -Protocol-只能指定无效的https
  • -HostHeader-我们最大的希望-让我们调查一下。

我们唯一的选择是使用-HostHeader。我们知道它接受类型string,因此我们可以尝试工具箱中的所有工具:

Get-WebBinding -Name "Default Web Site" -HostHeader ""
Get-WebBinding -Name "Default Web Site" -HostHeader $null
Get-WebBinding -Name "Default Web Site" -HostHeader ([String]::Empty)
Get-WebBinding -Name "Default Web Site" -HostHeader "*"

它们返回所有相同的条目:

protocol bindingInformation sslFlags
-------- ------------------ --------
https    *:443:api          1
https    *:443:api.cluster  1
https    *:443:             0

即他们全部。这是有道理的,因为-HostHeader参数是通配符过滤器。我们只能过滤 条目,而不能 select 条目。 “空”过滤器(即“”,$null[String]::Empty)与返回所有内容相同(即,它与完整通配符"*"返回相同的原因)。

我们可以通过将过滤器更改为以下内容来证明这一点:

Get-WebBinding -Name "Default Web Site" -HostHeader "api*"

哪个返回:

protocol bindingInformation sslFlags
-------- ------------------ --------
https    *:443:api          1
https    *:443:api.cluster  1

与我们想要的完全相反。

由于Get-WebBinding仅具有过滤参数,因此我们需要将其与选择参数(例如Where-Object)结合使用。由于sslflags是“要求服务器名称指示”的标志,因此“更好”的方法是根据bindingInformation进行选择:

Get-WebBinding -Name "Default Web Site" | Where-Object { $_.bindingInformation -eq '*:443:' }

返回我们想要的:

protocol bindingInformation sslFlags
-------- ------------------ --------
https    *:443:             0