0

我已经编写了一个脚本来使用foreach语法获取离线集群资源,它工作正常。但是我需要为 50 个集群获取集群离线资源,我已经尝试过foreach -parallel并且遇到了错误。

workflow Test-Workflow {
    Param ([string[]] $clusters)
    $clusters = Get-Content "C:\temp\Clusters.txt"
    foreach -parallel ($cluster in $clusters) {
        $clu1 = Get-Cluster -Name $cluster
        $clustername = $clu1.Name
        echo $clustername
        $clu2 = Get-Cluster $clustername |
                Get-ClusterResource |
                where { $_.Name -and $_.state -eq "offline" }
        echo $clu2
    }
}
Test-Workflow

输出:

slchypervcl003
slchypervcl004
Get-ClusterResource :输入对象不能绑定到任何参数
该命令要么是因为该命令不接受管道输入,要么是
输入及其属性与任何采用管道的参数都不匹配
输入。
在测试工作流程:8 字符:8
+
    + CategoryInfo : InvalidArgument: (slchypervcl003:PSObject) [Get-ClusterResource], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.FailoverClusters.PowerShell.GetResourceCommand
    + PSComputerName:[本地主机]

Get-ClusterResource :输入对象不能绑定到任何参数
该命令要么是因为该命令不接受管道输入,要么是
输入及其属性与任何采用管道的参数都不匹配
输入。
在测试工作流程:8 字符:8
+
    + CategoryInfo : InvalidArgument: (slchypervcl004:PSObject) [Get-ClusterResource], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.FailoverClusters.PowerShell.GetResourceCommand
    + PSComputerName:[本地主机]
4

1 回答 1

2

Get-ClusterResource只能将集群节点对象或集群组对象作为管道输入,传递给-InputObject参数。该Get-Cluster命令返回对象类型Microsoft.FailoverClusters.PowerShell.Cluster ,而不是管道输入所需的Microsoft.FailoverClusters.PowerShell.ClusterResourceMicrosoft.FailoverClusters.PowerShell.ClusterNodeGet-ClusterResource对象。如果您将代码更改为不使用管道,只是将集群名称作为参数值,您的结果有何不同?

更改以下内容:

$clu2 = Get-Cluster $clustername | Get-ClusterResource | where { $_.Name - 
and $_.state -eq "offline"}

至:

$clu2 = Get-ClusterResource -Name $clustername | where { $_.Name - 
and $_.state -eq "offline"}

或者:

$clu2 = Get-ClusterResource -Cluster $clustername | where { $_.Name - 
and $_.state -eq "offline"}
于 2019-03-04T13:04:29.373 回答