Суть в том что получить только пассивные узлы WFC (в данном случае, пассивным считается если на узле нет ресурса SQL) к этой информции добавить инфо об его партнере активном узле и ресурсах на активном. Накидал такой код, и встал собственно затык как добавить инфо о пассивных узлах с инфой об активной? Нужно массив $passivenods сравнить с $all и результат сравнение вывести в виде таблицы с колонками (resource_name, active_node, all_nodes, passive_node), но каким образом я пока понять не могу. Может есть более простой способо?
Код:
$clusters=Get-Cluster -domain MyDomain | where-object {$_.Name -like "*sql*"}
$allnodes=@()
$actnodes=@()
$passivenodes=@()
$all=@()
foreach ( $cluster in $clusters)
{
#get full info about resource (name resourse, current active node, all nodes)
$all+=gwmi -class "MSCluster_Resource" -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy| where {$_.type -eq "SQL Server"}|Select @{n='ServerInstance';e={("{0}\{1}" -f $_.PrivateProperties.VirtualServerName,$_.PrivateProperties.InstanceName).TrimEnd('\')}},@{n='Node';e={$(gwmi -Authentication PacketPrivacy -ComputerName $cluster -Namespace "root\mscluster" -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($_.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource"|select -ExpandProperty name)}},@{n='Nodes';e={[string]$(gwmi -q "Select Name from MSCluster_Node" -Namespace "root\mscluster" -Authentication PacketPrivacy -ComputerName $cluster |select -ExpandProperty name)}}
#get all nodes for compare
$allnodes+=gwmi -q "Select Name from MSCluster_Node" -namespace root\mscluster -ComputerName $cluster -Authentication PacketPrivacy|Select-Object @{Name="Node";Expression={$_.Name}}
#get only active nodes for compare
$actnodes+=gwmi -class "MSCluster_Resource" -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy | where {$_.type -eq "SQL Server"} | Select @{n='ServerInstance';e={("{0}\{1}" -f $_.PrivateProperties.VirtualServerName,$_.PrivateProperties.InstanceName).TrimEnd('\')}}, @{n='Node';e={$(gwmi -Authentication PacketPrivacy -ComputerName $cluster -Namespace "root\mscluster" -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($_.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource" | Select -ExpandProperty Name)}}|Select "Node"
}
#convert to string
$allnodes = [string[]]$allnodes|select -unique
$actnodes = [string[]]$actnodes
$all = [string[]]$all
# get nodes withou resource(aka "passive nodes")
$passivenodes=Compare-Object -ReferenceObject($allnodes) -DifferenceObject($actnodes)|where-object {$_.SideIndicator -eq "<="}|Select-Object @{Name="Nodes";Expression={$_.InputObject}}
$passivenodes