[英]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.