2015-06-01 20 views
1

作爲部署腳本的一部分,我想保存當前網站上的所有綁定 - 但我想將它們保存爲可用於重新創建它們的格式後來。將Get-WebBinding輸出轉換爲New-WebBinding命令

到目前爲止,我有這樣的:

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綁定:

  • 證書的指紋(-Thumbprint參數New-WebBinding
  • 什麼樣的SSL的結合是(爲New-WebBinding-SslFlags參數)

我開始與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 

} 
+1

你需要的值是在Bindings.Collection。您需要使用** GetAttributeValue **方法來檢索它們。就像這樣...'(Get-Item IIS:\ Sites \ TEST).Bindings.Collection [1] .GetAttributeValue(「certificateHash」)'和'(Get-Item IIS:\ Sites \ TEST).Bindings.Collection [1] .GetAttributeValue(「sslFlags」)' –

+0

優秀!如果我意識到我正在測試的一臺計算機實際上是Windows 2008而不是2012年,那麼我可能會想到這一點......輸入該答案作爲答案,我會接受它。 –

回答

0

您需要的參數值位於Bindings.Collection中。

您需要使用GetAttributeValue方法來檢索它們。

事情是這樣的......

(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("certificateHash") 
(Get-Item IIS:\Sites\TEST).Bindings.Collection[1].GetAttributeValue("sslFlags")