PoshCode Archive  Artifact [3762d2ead0]

Artifact 3762d2ead019ab6dfbc1d7ccd946a6a2938088adafd50404aaba3523e3076ac8:

  • File LibraryMSCS.ps1 — part of check-in [103f41e04c] at 2018-06-10 13:16:32 on branch trunk — Although Windows Server 2008 R2/Powershell 2.0 includes a FailoverClusters module, it only works on a machine running cluster service and NOT against Windows 2003/2008 clusters. This script provides a library functions for working with Microsft Cluster Services (MSCS) using the WMI MSCluster* class. Base class properties are extended with additional info from association classes. (user: Chad Miller size: 5067)

# encoding: ascii
# api: powershell
# title: LibraryMSCS
# description: Although Windows Server 2008 R2/Powershell 2.0 includes a FailoverClusters module, it only works on a machine running cluster service and NOT against Windows 2003/2008 clusters. This script provides a library functions for working with Microsft Cluster Services (MSCS) using the WMI MSCluster* class. Base class properties are extended with additional info from association classes.
# version: 0.1
# type: script
# author: Chad Miller
# license: CC0
# function: Get-Cluster
# x-poshcode-id: 2886
# x-archived: 2016-03-12T11:03:04
# x-published: 2012-08-03T05:47:00
#
#

# ------------------------------------------------------------------------
### <Script>
### <Author>
### Chad Miller 
### </Author>
### <Description>
### Defines functions for working with Microsoft Cluster Service (MSCS)
### Updated 8/3/2011
### Added Authentication PacketPrivacy to fix Access Denied errorson
### Windows 2008/2008 R2 clusters
### </Description>
### <Usage>
### . ./LibraryMSCS.ps1
### </Usage>
### </Script>
# ------------------------------------------------------------------------

#######################
function Get-Cluster
{
    param($cluster)
    
    gwmi -class "MSCluster_Cluster" -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy

} #Get-Cluster

#######################
function Get-ClusterName
{
    param($cluster)
    
    Get-Cluster $cluster | select -ExpandProperty name

} #Get-ClusterName

#######################
function Get-ClusterNode
{
    param($cluster)
    
    gwmi -class MSCluster_Node -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy | add-member -pass NoteProperty Cluster $cluster

} #Get-ClusterNode

#######################
function Get-ClusterSQLVirtual
{
    param($cluster)
    
    gwmi -class "MSCluster_Resource" -namespace "root\mscluster" -computername $cluster  -Authentication PacketPrivacy | where {$_.type -eq "SQL Server"} | Select @{n='Cluster';e={$cluster}}, Name, State, @{n='VirtualServerName';e={$_.PrivateProperties.VirtualServerName}}, @{n='InstanceName';e={$_.PrivateProperties.InstanceName}}, `
    @{n='ServerInstance';e={("{0}\{1}" -f $_.PrivateProperties.VirtualServerName,$_.PrivateProperties.InstanceName).TrimEnd('\')}}, `
    @{n='Node';e={$(gwmi -namespace "root\mscluster" -computerName $cluster -Authentication PacketPrivacy -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($_.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource" | Select -ExpandProperty Name)}}
    
} #Get-ClusterSQLVirtual

#######################
function Get-ClusterNetworkName
{
    param($cluster)
    
    gwmi -class "MSCluster_Resource" -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy | where {$_.type -eq "Network Name"} | Select @{n='Cluster';e={$cluster}}, Name, State, @{n='NetworkName';e={$_.PrivateProperties.Name}}, `
    @{n='Node';e={$(gwmi -namespace "root\mscluster" -computerName $cluster -Authentication PacketPrivacy -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($_.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource" | Select -ExpandProperty Name)}}
       
} #Get-ClusterNetworkName

#######################
function Get-ClusterResource
{
    param($cluster)
    gwmi -ComputerName $cluster -Authentication PacketPrivacy -Namespace "root\mscluster" -Class MSCluster_Resource | add-member -pass NoteProperty Cluster $cluster | 
    add-member -pass ScriptProperty Node `
    { gwmi -namespace "root\mscluster" -computerName $this.Cluster -Authentication PacketPrivacy -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($this.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource" | Select -ExpandProperty Name } |
    add-member -pass ScriptProperty Group `
    { gwmi -ComputerName $this.Cluster -Authentication PacketPrivacy -Namespace "root\mscluster" -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($this.Name)'} WHERE AssocClass = MSCluster_ResourceGroupToResource" | Select -ExpandProperty Name }
        
} #Get-ClusterResource

#######################
function Get-ClusterGroup
{
    param($cluster)
    
    gwmi -class MSCluster_ResourceGroup -namespace "root\mscluster" -computername $cluster -Authentication PacketPrivacy | add-member -pass NoteProperty Cluster $cluster  | 
    add-member -pass ScriptProperty Node `
    { gwmi -namespace "root\mscluster" -computerName $this.Cluster -Authentication PacketPrivacy -query "ASSOCIATORS OF {MSCluster_ResourceGroup.Name='$($this.Name)'} WHERE AssocClass = MSCluster_NodeToActiveGroup" | Select -ExpandProperty Name } |
    add-member -pass ScriptProperty PreferredNodes `
    { @(,(gwmi -namespace "root\mscluster" -computerName $this.Cluster -Authentication PacketPrivacy -query "ASSOCIATORS OF {MSCluster_ResourceGroup.Name='$($this.Name)'} WHERE AssocClass = MSCluster_ResourceGroupToPreferredNode" | Select -ExpandProperty Name)) }

} #Get-ClusterGroup