将 Get-WebBinding 输出转换为 New-WebBinding 命令
Turn Get-WebBinding output into New-WebBinding commands
作为部署脚本的一部分,我想保存网站上当前的所有绑定 -- 但我想以一种可用于稍后重新创建它们的格式保存它们。
到目前为止我有这个:
Import-module WebAdministration
(Get-Item IIS:\Sites$siteName).Bindings.Collection | select-object @{ Label="CMD"; Expression={"New-WebBinding -name '{0}' -Protocol {1} -IPAddress '{2}' -Port {3} -HostHeader '{4}'" -f "#siteName",$_.protocol,$_.bindingInformation.split(":")[0],$_.bindingInformation.split(":")[1],$_.bindingInformation.split(":")[2]}} | findstr "New-WebBinding" >c:\temp\bindings-$siteName.ps1
这会产生如下有用的输出:
New-WebBinding -name 'w2pclient' -Protocol http -IPAddress '172.16.7.17' -Port 80 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol http -IPAddress '172.16.7.16' -Port 80 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol https -IPAddress '172.16.7.18' -Port 443 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol https -IPAddress '172.16.7.36' -Port 443 -HostHeader ''
不幸的是,如您所见,关于 SSL 绑定缺少两件事:
- 证书的指纹(
New-WebBinding
的-Thumbprint
参数)
- 它是哪种 SSL 绑定(
-SslFlags
New-WebBinding
的参数)
我开始研究 dir IIS:\SslBindings
作为替代方案,我看到它如何让我得到 Thumbprint
而不是 SslFlags
.
有什么想法吗?
[编辑] Jan Chrbolka 给了我答案。这是我的最终脚本:
function Record-Bindings([string]$siteName)
{
Import-module WebAdministration
(Get-Item IIS:\Sites$siteName).Bindings.Collection |
Select-Object bindinginformation, Protocol, @{ name="IP"; expression={$_.bindinginformation.split(":")[0]}},
@{name="Port"; expression={$_.bindinginformation.split(":")[1]}},
@{name="HostName"; expression={$_.bindinginformation.split(":")[2]}},
@{name="certificateHash"; expression={$_.GetAttributeValue("certificateHash")}},
@{name="sslFlags"; expression={$_.GetAttributeValue("sslFlags")}} |
Where-Object {$_.Port -lt 8000} |
ForEach-Object { "New-WebBinding -name '{0}' -Protocol {1} -IPAddress '{2}' -Port {3} -HostHeader '{4}' -Thumbprint '{5}' -SslFlags {6}" `
-f "$siteName",$_.protocol,$_.IP, $_.Port, $_.HostName, $_.certificateHash, $_.sslFlags } > c:\temp\bindings-$siteName.ps1
}
您需要的参数值位于 Bindings.Collection 中。
您需要使用 GetAttributeValue 方法来检索它们。
像这样...
(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("certificateHash")
(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("sslFlags")
作为部署脚本的一部分,我想保存网站上当前的所有绑定 -- 但我想以一种可用于稍后重新创建它们的格式保存它们。
到目前为止我有这个:
Import-module WebAdministration
(Get-Item IIS:\Sites$siteName).Bindings.Collection | select-object @{ Label="CMD"; Expression={"New-WebBinding -name '{0}' -Protocol {1} -IPAddress '{2}' -Port {3} -HostHeader '{4}'" -f "#siteName",$_.protocol,$_.bindingInformation.split(":")[0],$_.bindingInformation.split(":")[1],$_.bindingInformation.split(":")[2]}} | findstr "New-WebBinding" >c:\temp\bindings-$siteName.ps1
这会产生如下有用的输出:
New-WebBinding -name 'w2pclient' -Protocol http -IPAddress '172.16.7.17' -Port 80 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol http -IPAddress '172.16.7.16' -Port 80 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol https -IPAddress '172.16.7.18' -Port 443 -HostHeader ''
New-WebBinding -name 'w2pclient' -Protocol https -IPAddress '172.16.7.36' -Port 443 -HostHeader ''
不幸的是,如您所见,关于 SSL 绑定缺少两件事:
- 证书的指纹(
New-WebBinding
的-Thumbprint
参数) - 它是哪种 SSL 绑定(
-SslFlags
New-WebBinding
的参数)
我开始研究 dir IIS:\SslBindings
作为替代方案,我看到它如何让我得到 Thumbprint
而不是 SslFlags
.
有什么想法吗?
[编辑] Jan Chrbolka 给了我答案。这是我的最终脚本:
function Record-Bindings([string]$siteName)
{
Import-module WebAdministration
(Get-Item IIS:\Sites$siteName).Bindings.Collection |
Select-Object bindinginformation, Protocol, @{ name="IP"; expression={$_.bindinginformation.split(":")[0]}},
@{name="Port"; expression={$_.bindinginformation.split(":")[1]}},
@{name="HostName"; expression={$_.bindinginformation.split(":")[2]}},
@{name="certificateHash"; expression={$_.GetAttributeValue("certificateHash")}},
@{name="sslFlags"; expression={$_.GetAttributeValue("sslFlags")}} |
Where-Object {$_.Port -lt 8000} |
ForEach-Object { "New-WebBinding -name '{0}' -Protocol {1} -IPAddress '{2}' -Port {3} -HostHeader '{4}' -Thumbprint '{5}' -SslFlags {6}" `
-f "$siteName",$_.protocol,$_.IP, $_.Port, $_.HostName, $_.certificateHash, $_.sslFlags } > c:\temp\bindings-$siteName.ps1
}
您需要的参数值位于 Bindings.Collection 中。
您需要使用 GetAttributeValue 方法来检索它们。
像这样...
(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("certificateHash")
(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("sslFlags")