使用WMI和Powershell将新的ServerBinding添加到IIS 6站点

时间:2010-02-10 22:10:25

标签: powershell wmi

给定一个有效的$ server,以下代码将把所有ServerBindings从它们现有的子网移动到一个漂亮,闪亮的新服务器1.1.1。

$objWMI = [WmiSearcher] "Select * From IIsWebServerSetting WHERE Name = 'w3svc/10'" 
$objWMI.Scope.Path = "\\" + $server + "\root\microsoftiisv2"    
$objWMI.Scope.Options.Authentication = 6 
$sites = $objWMI.Get() 
foreach ($site in $sites) 
{
    $bindings = $site.ServerBindings 
   foreach ($binding in $bindings) 
   {
       $binding.IP = $binding.IP -ireplace "^\d{1,3}\.\d{1,3}\.\d{1,3}","1.1.1" 
   } 
   $site.ServerBindings = $bindings 
   $site.Put() 
}

我喜欢它。它很棒。

当我尝试将新的ServerBinding添加到列表时,就会出现问题。它完全吸了我的味道。

我可以用以下方法克隆现有的绑定:

   $newBinding = $existingBinding.Clone()
   $newBinding.Hostname = "test." + $newBinding.Hostname
   $bindings += $newBinding

绑定将有1个新元素,新元素将与兄弟相同,但当我尝试更新我的$ site.ServerBindings时,我敬酒:

Exception setting "ServerBindings": "Unable to cast object of type'System.Management.Automation.PSObject' to type 'Sys tem.Management.ManagementBaseObject'."

将新元素添加到原始数组会将数组从ManagementBaseObject更改为PSObject吗?

我尝试的其他任何东西似乎也无效。我无法在$ site.ServerBindings值中添加新元素,因为它是只读的。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

尝试在添加新服务器绑定之前展开PSObject,例如:

$bindings += $newBinding.psobject.baseobject

这似乎是PowerShell 2.0中的一个错误,我希望很快就会修复。