0

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

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

这是我当前的代码:

Get-Website -Name $siteName | Get-WebBinding  | Where-Object { $_.HostHeader -notlike '*dummy*' } | Remove-WebBinding;

我有 272 个(-2 虚拟)绑定要删除,大约需要 3 分钟。

任何想法如何更快地做到这一点?

顺便说一句:一个一个地添加所有这些绑定也非常慢,但我想如果我能在这里找到答案,类似的解决方案也可以添加。

4

2 回答 2

1

从评论中复制并扩大一点。

缓慢的原因

WebAdministration cmdlet 是很久以前设计的,它有很多缺点。

您观察到的缓慢可以通过设计来解释。虽然它不是开源的,但我们可以猜测每次调用Remove-WebBinding都会创建相关的底层对象(如ServerManager),然后将更改提交到 IIS 配置文件。因此,要删除的绑定越多,花费的时间就越长(消耗的资源也就越多)。

解决方案

对于今天所有支持的 IIS 版本 (8+),您应该改用IISAdministration cmdlet。它们是新开发的,兼顾了灵活性和性能。

通过使用单个ServerManager对象并只提交一次更改,删除绑定可以快得多。

于 2020-05-25T14:16:16.673 回答
0

尝试在 PowerShell 脚本下运行:

Import-Module WebAdministration  
Get-WebBinding -HostHeader 'dummy' | Remove-WebBinding -Confirm:$true
于 2020-05-21T08:23:39.293 回答