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

h79rfbju  于 2023-03-08  发布在  其他
关注(0)|答案(2)|浏览(140)

我有以下绑定:

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

但是,我不能选择没有主机头的绑定。如果传入""$NUL,我仍然得到所有绑定:

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

有没有更好的方法可以让我得到一个没有主机头的默认绑定?谢谢!

qvsjd97n

qvsjd97n1#

看起来确实不能显式使用Get-WebBinding来获取 * 仅仅 * 没有主机头的那个。
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参数是一个 * wildcard Filter *。我们只能 * filter * 条目,而不能 * select * 条目。"Empty"过滤器(也就是""、$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
avwztpqn

avwztpqn2#

我知道这是一个老线索,但为了其他人的利益,搜索和找到这个线索。
(Get-WebBinding).BindingInformation | ? {$_ -like '*:'}

相关问题