如何在PowerShell fast中删除多个IIS绑定?

如何在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

在版本升级过程中,我们当前的解决方案从一个站点获取所有绑定(两个伪URL除外),并在另一个站点上设置它们

我目前正在通过PowerShell删除绑定,但速度非常慢。我查看了SO中的每个线程,几乎每个解决方案都使用“删除网络绑定”

这是我当前的代码:

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环境的大小相当)。