[英]Swap IIS Bindings Between Two Sites
我正在尝试在 2 个站点之间交换绑定是 Powershell 中的 IIS。 下面的脚本正在运行,但似乎有点太复杂了:
$site1Name = ''
$site2Name = ''
$site1 = Get-Website | Where-Object {$_.Name -eq $site1Name}
$site2 = Get-Website | Where-Object {$_.Name -eq $site2Name}
$site1Bindings = $site1 | Get-WebBinding
$site2Bindings = $site2 | Get-WebBinding
$site1 | Get-WebBinding | Remove-WebBinding
$site2 | Get-WebBinding | Remove-WebBinding
function Copy-Bindings
{
param($siteA_Bindings, [string]$siteB_Name)
foreach ($binding in $siteA_Bindings)
{
$bindingInformation = $binding['bindingInformation'].Split(':')
$ip = $bindingInformation[0]
$port = $bindingInformation[1]
if ($bindingInformation.Length -gt 2)
{
$hostRecord = $bindingInformation[2]
}
else
{
$hostRecord = ''
}
$protocol = $binding['protocol']
New-WebBinding -Name $siteB_Name -Port $port -Protocol $protocol -IPAddress $ip -HostHeader $hostRecord
}
}
Copy-Bindings $site1Bindings $site2Name
Copy-Bindings $site2Bindings $site1Name
我想要的是更像这样的东西(在伪代码中):
$site1Name = ''
$site2Name = ''
$site1 = Get-Website | Where-Object {$_.Name -eq $site1Name}
$site2 = Get-Website | Where-Object {$_.Name -eq $site2Name}
$site1Bindings = $site1 | Get-WebBinding
$site2Bindings = $site2 | Get-WebBinding
$site1 | Get-WebBinding | Remove-WebBinding
$site2 | Get-WebBinding | Remove-WebBinding
$site1Bindings | New-WebBinding -Name $site2Name
$site2Bindings | New-WebBinding -Name $site1Name
有什么办法可以简化吗?
谢谢,
简短的回答,不,它不能简化到所需的伪代码所代表的程度。当前函数对于 IPv4 站点绑定来说工作得很好,但需要对 IPv6 绑定进行更多调整(除 [ 和 ] 之外,还需要: )。
New-WebBinding的帮助文件显示,虽然所需的参数确实采用管道输入,但它是 ByPropertyName(如果属性名称匹配则有效)而不是 ByValue(如果对象类型匹配则有效)。
仔细看看我们从$site1Bindings
变量的示例结果中得到的结果,就会明白为什么。 首先,我们来看看对象类型:
PS C:\windows\system32> $site2Bindings | GM
TypeName:
Microsoft.IIs.PowerShell.Framework.ConfigurationElement#bindings#binding
不幸的是, New-WebBinding
不接受该对象类型作为任何参数的输入。 这排除了直接将其用于管道到New-WebBinding
。 但是, $site2Bindings
的属性名称呢? 下面是一个示例:
PS C:\windows\system32> $site2Bindings | FL
protocol : http
bindingInformation : [2002:4000:200:9:900:e45e:e501:aa37]:80:
sslFlags : 0
好吧, protocol
匹配参数的名称,因此可以通过管道输入使用,但这是唯一的。 因此,您必须将结果信息切碎并将其分配给变量,就像您在函数中所做的那样。 可能有一种更New-WebBinding
方法来分割结果,但在使用New-WebBinding
时无法避免它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.