2012-02-10 30 views
5

Goal: Cập nhật một tiêu đề máy chủ hiện tại cho một trang web IIS7.5 với PowerShellCập nhật chủ Header trong IIS với Powershell

Vấn đề: Set-WebBinding đòi hỏi tên của trang web mà tôi không có. Tôi có HostHeader mặc dù.

Kịch bản: Tôi có nhiều trang web trong IIS. Một số người trong số họ có một tiêu đề máy chủ với một chuỗi cụ thể mà tôi muốn thay đổi.

Site1 - site1.stuff.domain.net 
Site2 - site2.stuff.domain.net 
Site3 - site3.domain.net 

Tôi muốn thay đổi tất cả các trang web có tiêu đề .stuff trong tiêu đề của chúng.

Tôi đang sử dụng Get-WebBinding để nhận danh sách tất cả các trang web và các ràng buộc của chúng. Sau đó tôi lặp qua chúng và kiểm tra xem bindingInformation có chứa .stuff hay không. Tôi sửa đổi các chuỗi làm thế nào tôi hài lòng và sau đó đi để cập nhật các tiêu đề với

Set-WebBinding -HostHeader $originalHeader -SetProperty HostHeader -Value $newHeader 

Rõ ràng tuy nhiên, bạn phải có tên của trang web để sử dụng Set-WebBinding, không giống như Get-WebBinding cho phép bạn để có được một ràng buộc dựa trên HostHeader (Get-WebBinding -HostHeader $someValue). Có cách nào để sử dụng Set-WebBinding mà không cần chỉ định Name của trang web không? Có cách nào để tôi có thể lấy tên của trang web từ Get-WebBinding không? Có cách thay thế cho Set-WebBinding không? Hay là có cách nào tốt hơn để làm những gì tôi đang cố gắng làm?

Trả lời

4

này cung cấp cho một thử:

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{ 
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.' 
    Set-WebConfigurationProperty -Filter $_.ItemXPath -PSPath IIS:\ -Name Bindings -Value @{protocol='http';bindingInformation=$NewHeader} 
} 
+0

Tốt, rất đẹp. – Kev

+0

Thật không may điều này không hoạt động khi có nhiều ràng buộc trên mỗi trang web. Trong trường hợp này $ _ Giá trị thuộc tính ItemXPath là như nhau, vì vậy chỉ có hiệu lực ràng buộc cuối cùng tồn tại. – esteewhy

1

Modified câu trả lời Shay để hỗ trợ nhiều ràng buộc.

Get-WebBinding -HostHeader *.stuff.* | Foreach-Object{ 
    #$NewHeader = $_.bindingInformation -replace '\.stuff\.','.staff.' 
    Set-WebConfigurationProperty -Filter ($_.ItemXPath + "/bindings/binding[@protocol='http' and @bindingInformation='" + $_.bindingInformation + "']") -PSPath IIS:\ -Name bindingInformation -Value $NewHeader 
} 
Các vấn đề liên quan