簡體   English   中英

在兩個站點之間交換 IIS 綁定

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM