如何快速删除 PowerShell 中的多个 IIS 绑定?
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 分钟。
有什么办法可以更快吗?
顺便说一句:一个一个地添加所有这些绑定也非常慢,但我想如果我能在这里找到答案,类似的解决方案也可以用于添加。
尝试 运行 下面的 PowerShell 脚本:
Import-Module WebAdministration
Get-WebBinding -HostHeader 'dummy' | Remove-WebBinding -Confirm:$true
从评论中复制并稍微展开。
缓慢的原因
WebAdministration cmdlets 是很久以前设计的,有很多缺点。
您观察到的缓慢可以解释为设计使然。虽然它不是开源的,但我们可以猜测,每次调用 Remove-WebBinding
都会创建相关的底层对象(如 ServerManager
),然后将更改提交到 IIS 配置文件。因此,要删除的绑定越多,所需的时间就越长(消耗的资源也就越多)。
解决方案
对于今天(8+)所有支持的 IIS 版本,您应该改用 IISAdministration cmdlets。它们是新开发的,兼顾了灵活性和性能。
通过使用单个 ServerManager
对象并仅提交一次更改,删除绑定的速度会快得多。
在版本升级过程中,我们当前的解决方案从一个站点获取所有绑定(两个虚拟 url 除外)并在另一个站点上设置它们。
我目前正在通过 PowerShell 删除绑定,但速度非常慢。我查看了 SO 中的每个线程,几乎每个解决方案都使用 "Remove-WebBinding".
这是我当前的代码:
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 cmdlets 是很久以前设计的,有很多缺点。
您观察到的缓慢可以解释为设计使然。虽然它不是开源的,但我们可以猜测,每次调用 Remove-WebBinding
都会创建相关的底层对象(如 ServerManager
),然后将更改提交到 IIS 配置文件。因此,要删除的绑定越多,所需的时间就越长(消耗的资源也就越多)。
解决方案
对于今天(8+)所有支持的 IIS 版本,您应该改用 IISAdministration cmdlets。它们是新开发的,兼顾了灵活性和性能。
通过使用单个 ServerManager
对象并仅提交一次更改,删除绑定的速度会快得多。