给定一个有效的$ 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值中添加新元素,因为它是只读的。
我感谢任何帮助。
答案 0 :(得分:1)
尝试在添加新服务器绑定之前展开PSObject,例如:
$bindings += $newBinding.psobject.baseobject
这似乎是PowerShell 2.0中的一个错误,我希望很快就会修复。