Microsoft(和其他公司)对此有很好的文档,但对我来说不起作用。我正在尝试设置 IP 地址参数。问题是 IP 地址不属于允许修改的对象类型。
例如这失败了(来自 MS 文档)
PS C:\> Get-ClusterResource -Name "Cluster IP Address" | Set-ClusterParameter -Multiple @{"Address"="172.24.22.168";"Network"="Cluster Network 2";"EnableDhcp"=1}
集群的 IP 地址是“集群 IP 地址”。我可以看到它。GetType() 是 PSObject。但是当我运行 Set-ClusterParameter 命令时,错误是:
Set-ClusterParameter:输入对象无法绑定到该命令的任何参数,因为该命令不接受管道输入,或者输入及其属性与任何接受管道输入的参数不匹配。
如果我尝试使用该对象。
PS C:\Users\rdejournett> Set-ClusterParameter -InputObject
$SqlIpAddress Set-ClusterParameter:无法将参数“InputObject”绑定到目标。异常设置“InputObject”:“管道中的对象无效。此 cmdlet 仅接受以下类型的对象:Microsoft.FailoverClusters.PowerShell.Cluster、Microsoft.FailoverClusters.PowerShell.ClusterGroup、Microsoft.FailoverClusters.PowerShell.ClusterResource、Microsoft.FailoverClusters.PowerShell.ClusterResourceType、Microsoft.FailoverClusters.PowerShell.ClusterNetwork、Microsoft.FailoverClusters.PowerShell.ClusterNetworkInterface、Microsoft.FailoverClusters.PowerShell.ClusterNode、Microsoft.FailoverClusters.PowerShell.ClusterSharedVolume、Microsoft.FailoverClusters.PowerShell.ClusterParameter”
(对象是这样设置的)
$SqlIpAddress = Get-ClusterResource | Where-Object {$_.Name.StartsWith("集群 IP 地址")}
尽管有文档说明,但 IP 地址资源似乎不是一种可以设置的资源类型(或者我做错了什么……)
答案1
这真是太不可思议了。MS 文档导致了非常奇怪的结果。
答案是我使用了错误版本的 powershell。不要使用 Powershell 7。使用 Windows 自带的 powershell 版本。
该命令应该可以工作:
PS C:\Users\rdejournett> $t = Get-ClusterGroup -Name "Cluster Group"
PS C:\Users\rdejournett> $t.GetType()
结果对象类型应为
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False ClusterGroup Microsoft.FailoverClusters.PowerShell.ClusterObject
在 powershell 7 中,BaseType 是 psobject - 基本上它所做的是将所有内容存储为基础对象(与集群组相关),因此所有管道都无法正常工作。