如何在PowerShell fast中删除多个IIS绑定?
在版本升级过程中,我们当前的解决方案从一个站点获取所有绑定(两个伪URL除外),并在另一个站点上设置它们 我目前正在通过PowerShell删除绑定,但速度非常慢。我查看了SO中的每个线程,几乎每个解决方案都使用“删除网络绑定” 这是我当前的代码:如何在PowerShell fast中删除多个IIS绑定?,powershell,iis,iis-10,web-administration,hostheaders,Powershell,Iis,Iis 10,Web Administration,Hostheaders,在版本升级过程中,我们当前的解决方案从一个站点获取所有绑定(两个伪URL除外),并在另一个站点上设置它们 我目前正在通过PowerShell删除绑定,但速度非常慢。我查看了SO中的每个线程,几乎每个解决方案都使用“删除网络绑定” 这是我当前的代码: Get-Website -Name $siteName | Get-WebBinding | Where-Object { $_.HostHeader -notlike '*dummy*' } | Remove-WebBinding; 我有272
Get-Website -Name $siteName | Get-WebBinding | Where-Object { $_.HostHeader -notlike '*dummy*' } | Remove-WebBinding;
我有272(-2个虚拟)绑定要删除,需要大约3分钟
有没有办法加快速度
顺便说一句:一个接一个地添加所有这些绑定也非常慢,但我想如果我能在这里找到答案,也可以使用类似的解决方案进行添加。尝试运行下面的PowerShell脚本:
Import-Module WebAdministration
Get-WebBinding -HostHeader 'dummy' | Remove-WebBinding -Confirm:$true
从注释中复制并将其展开一点 缓慢的原因 WebAdministration cmdlet是很久以前设计的,它有许多缺点 你观察到的缓慢可以用设计来解释。虽然它不是开源的,但我们可以猜测,
Remove WebBinding
的每次调用都会创建相关的底层对象(如ServerManager
),然后将更改提交到IIS配置文件。因此,要删除的绑定越多,所需时间越长(消耗的资源也越多)
解决方案
对于今天的所有支持IIS版本(8+),您应该使用。它们是新开发的,同时考虑到灵活性和性能
通过使用一个
ServerManager
对象并只提交一次更改,删除绑定的速度会快得多。这看起来不太正确其中的对象{$\ HostHeader-与“*dummy*”| Remove WebBinding}
-这是一个输入错误吗?@MathiasR.Jessen-是的,很抱歉我会在edit中修复它。当使用WebAdministration cmdlet时,它注定会很慢,因为每次调用都会一次又一次地创建相关的底层对象。切换到IISA管理cmdlet并使用单个ServerManager
对象。那要快得多@莱克斯利,这就是解决办法,谢谢!我的sctipt现在运行4秒,而不是4分钟(这是一个开发环境,与prod环境的大小相当)。你能写一个我可以接受的完整答案吗?我不能使用确认标志,因为这个脚本应该在没有人工干预的情况下运行(部署管道的一部分)@IdanLevi你可以删除确认标志谢谢!这就解决了问题。我的sctipt现在运行4秒,而不是4分钟(这是一个开发环境,与prod环境的大小相当)。