2011-06-17 11 views
14

मैं http किसी विशेष साइट पर बाध्यकारी जो मैं के साथ कर सकते अद्यतन करने के लिए कोशिश कर रहा हूँ:Powershell अद्यतन IIS बाइंडिंग

Set-ItemProperty "IIS:\Sites\SiteName" -Name bindings -Value @{protocol="http";bindingInformation=*:80:hostname.site.net} 
समस्या मैं हालांकि आ रही है कि इस आदेश का पूरी तरह से तो बाध्यकारी जानकारी बदल देता है

यदि कोई https बाध्यकारी है तो इसे सेट-आइटमप्रॉपर्टी के साथ हटा दिया जाता है।

क्या किसी को भी दूसरों को हटाने या पूरी बाध्यकारी स्ट्रिंग को फिर से बनाने के बिना HTTP जैसे विशिष्ट बाइंडिंग को अपडेट करने का तरीका पता है?

उत्तर

17

वेबसाइट के बाध्यकारी संग्रह में बाध्यकारी अद्यतन करने के लिए कदम, प्रक्रिया वास्तव में वेबसाइट के बाध्यकारी संग्रह को प्राप्त करने के लिए है, विशिष्ट बाध्यकारी को संशोधित करें, और फिर पूरे संग्रह को फिर से सेट करें।

Function ReplaceWebsiteBinding { 

    Param(
     [string] $sitename, 
     [string] $oldBinding, 
     [string] $newValue 
    ); 
    import-module webadministration; 
    $wsbindings = (Get-ItemProperty -Path "IIS:\Sites\$sitename" -Name Bindings) 
    for($i=0;$i -lt ($wsbindings.Collection).length;$i++){ 
     if((($wsbindings.Collection[$i]).bindingInformation).Contains($oldBinding)){ 
      ($wsbindings.Collection[$i]).bindingInformation = $newValue; 
     } 
    } 
    Set-ItemProperty -Path "IIS:\Sites\$sitename" -Name Bindings -Value $wsbindings 
} 

ReplaceWebsiteBinding "Default Web Site" "*:80:" "192.168.1.101:80:SomeHostHeader.domain"; 

[ध्यान दें: 20,131,016 संपादित: आसानी से देखने के लिए इस सवाल का जवाब साफ] [ध्यान दें: संपादित 20,160,817: सही परम चर प्रकार परिभाषाएं]

+0

मुझे नहीं लगता कि इस समाधान काफी अच्छा है, तो आप एक से अधिक है, क्योंकि यह सब बाइंडिंग को नष्ट करेगा है और सिर्फ निर्दिष्ट एक साथ छोड़। –

+0

मैं इस बात से सहमत नहीं हूं कि यह वास्तव में प्रश्न का उत्तर देता है, लेकिन मुझे लगता है कि यह आईआईएस के खिलाफ शक्तियों के साथ अच्छा है। मैं जो देखना चाहता हूं वह कुछ है '$ बी = गेट-वेब बाइंडिंग; $ b.SetAttribute ('पोर्ट', 99 99); $ बी। सेव; 'लेकिन यह काम नहीं करता है। मैं डाउनवोट को तब तक नहीं हटा सकता जब तक आप उत्तर (!) ... अजीब नहीं बदलते। –

+0

परिवर्तन के माध्यम से जवाब में चम्मच समाधान प्रदान किया गया है। कृपया अपने डाउनवोट की समीक्षा करें। – JonnyG

15

यहाँ एक और वाक्य रचना रूप है। मैं इसे पसंद करता हूं क्योंकि यह अधिक प्राकृतिक लगता है। यदि आपके पास पहले से ही वेब प्रशासन प्रशासन पीएस मॉड्यूल लोड नहीं है, तो पहले आयात करें (import-module webadministration)।

New-WebBinding -name test03 -port 443 -Protocol https -HostHeader test03.int -IPAddress "*" 
+1

क्या आप इस कमांड के साथ एसएसएल प्रमाणपत्र जोड़ सकते हैं? –

+1

हां - यहां कुछ और जानकारी है कि यह कैसे करें: http://www.iis.net/learn/manage/powershell/powershell-snap-in-configuring-ssl-with-the-iis-powershell-snap- – northben

+0

में ध्यान दें कि यह कमांडलेट Windows Server 2012 के साथ पेश किया गया था। यदि आप अभी भी सर्वर 2008 पर हैं, तो आपको जॉनीजी के समाधान के साथ जाना होगा। – JamesQMurphy

1

सेट WebBinding -नाम 'डिफ़ॉल्ट वेब साइट' -BindingInformation "*: 80:" -PropertyName पोर्ट -Value 12

सुब्रत

+0

आपको अपने उत्तर में थोड़ा और स्पष्टीकरण शामिल करने का प्रयास करना चाहिए। – kddeisz

1

यहाँ एक PowerShell स्क्रिप्ट मैंने हाल ही में लिखा है कि आप क्या चाहते करने के लिए अनुकूलित किया जा सकता है:

# Updates IIS bindings across all sites by replacing all occurrences 
# of $searchString for $replaceString in the binding host header. 
# Note that the search and replace is case insensitive. 

$searchString = "ovh-ws0" 
$replaceString = "ovh-ws1" 
foreach ($website in Get-Website) { 
    "Site: {0}" -f $website.name 
    $bindings = Get-WebBinding -Name $website.name 
    foreach ($binding in $website.bindings.Collection) { 
     $bindingInfo = $binding.bindingInformation 
     " Binding: {0}" -f $bindingInfo 
     if ($bindingInfo -imatch $searchString) { 
      $oldhost = $bindingInfo.Split(':')[-1] 
      $newhost = $oldhost -ireplace $searchString, $replaceString 
      "  Updating host: {0} ---> {1}" -f $oldhost, $newhost 
      Set-WebBinding -Name $website.name -BindingInformation $bindingInfo -PropertyName "HostHeader" -Value $newhost 
     } 
    } 
} 

और यह ऊपर स्क्रिप्ट से एक नमूना उत्पादन होता है:

Site: alpha 
    Binding: 100.101.102.103:80:alpha.redacted.com 
    Binding: 100.101.102.103:80:ovh-ws0-alpha.redacted.com 
     Updating host: ovh-ws0-alpha.redacted.com ---> ovh-ws1-alpha.redacted.com 
    Binding: 100.101.102.103:443:ovh-ws0-alpha.redacted.com 
     Updating host: ovh-ws0-alpha.redacted.com ---> ovh-ws1-alpha.redacted.com 
    Binding: 100.101.102.103:443:alpha.redacted.com 
Site: beta 
    (etc) 
Site: release 
    (etc) 

बेशक, स्क्रिप्ट को अन्य तरीकों से बाइंडिंग को संशोधित करने के लिए अनुकूलित किया जा सकता है। उदाहरण के लिए, निम्न स्क्रिप्ट आई पी पतों को अपडेट कर देगा:

# Updates IIS bindings across all sites by replacing all IP addresses from $oldIP to $newIP. 

$oldIP = "100.101.102.103" 
$newIP = "*" 
foreach ($website in Get-Website) { 
    "Site: {0}" -f $website.name 
    $bindings = Get-WebBinding -Name $website.name 
    foreach ($binding in $website.bindings.Collection) { 
     $bindingInfo = $binding.bindingInformation 
     " Binding: {0}" -f $bindingInfo 
     if ($bindingInfo -imatch $oldIP) { 
      "  Updating IP: {0} ---> {1}" -f $oldIP, $newIP 
      Set-WebBinding -Name $website.name -BindingInformation $bindingInfo -PropertyName "IPAddress" -Value $newIP 
     } 
    } 
}