[英]How to remove multiple IIS bindings in PowerShell fast?
在版本升級過程中,我們當前的解決方案從一個站點獲取所有綁定(兩個虛擬 url 除外)並將它們設置在另一個站點上。
我目前正在通過 PowerShell 刪除綁定,但速度非常慢。 我查看了 SO 中的每個線程,幾乎每個解決方案都使用“Remove-WebBinding”。
這是我當前的代碼:
Get-Website -Name $siteName | Get-WebBinding | Where-Object { $_.HostHeader -notlike '*dummy*' } | Remove-WebBinding;
我有 272 個(-2 虛擬)綁定要刪除,大約需要 3 分鍾。
任何想法如何更快地做到這一點?
順便說一句:一個一個地添加所有這些綁定也非常慢,但我想如果我能在這里找到答案,類似的解決方案也可以添加。
從評論中復制並擴大一點。
WebAdministration cmdlet 是很久以前設計的,它有很多缺點。
您觀察到的緩慢可以通過設計來解釋。 雖然它不是開源的,但我們可以猜測,每次調用Remove-WebBinding
都會創建相關的底層對象(如ServerManager
),然后將更改提交到 IIS 配置文件。 因此,要刪除的綁定越多,花費的時間就越長(消耗的資源也就越多)。
對於今天 (8+) 的所有受支持的 IIS 版本,您應該改用IISAdministration cmdlet 。 它們是新開發的,兼顧了靈活性和性能。
通過使用單個ServerManager
object 並只提交一次更改,刪除綁定可以快得多。
嘗試在 PowerShell 腳本下運行:
Import-Module WebAdministration
Get-WebBinding -HostHeader 'dummy' | Remove-WebBinding -Confirm:$true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.