Last active
November 27, 2017 03:27
-
-
Save techthoughts2/ab1169cf3b6bdd21b21b to your computer and use it in GitHub Desktop.
Tests / evaluates if local device is a member of a cluster or a standalone server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.Synopsis | |
Evaluates if local device is a member of a cluster or a standalone server | |
.DESCRIPTION | |
Evaluates several factors to determine if device is a member of a cluster or acting as a standalone server. The cluster service is evaluated, and if present the cluster nodes will be tested to determine if the local device is a member. If the cluster service is not running the cluster registry location is evaluated to determine if the server's cluster membership status. | |
.EXAMPLE | |
Test-IsACluster | |
Returns boolean if local device is part of a cluster | |
.OUTPUTS | |
Boolean value | |
.NOTES | |
Author: Jake Morrison | |
http://techthoughts.info | |
The design of this function intends the function to be run on the device that is being evaluated | |
#> | |
function Test-IsACluster { | |
[CmdletBinding()] | |
param () | |
#assume device is not a cluster | |
[bool]$clusterEval = $false | |
$nodes = $null | |
$clusterCheck = $null | |
$clusterNodeNames = $null | |
try { | |
$hostName = $env:COMPUTERNAME | |
Write-Verbose -Message "HostName is: $hostName" | |
Write-Verbose -Message "Verifying presence of cluster service..." | |
$clusterCheck = get-service ClusSvc -ErrorAction SilentlyContinue | |
if ($clusterCheck -ne $null) { | |
Write-Verbose -Message "Cluster Service found." | |
Write-Verbose -Message "Checking cluster service status..." | |
$clusterServiceStatus = Get-Service ClusSvc | Select-Object -ExpandProperty Status | |
if ($clusterServiceStatus -eq "Running") { | |
Write-Verbose -Message "Cluster serivce running." | |
Write-Verbose -Message "Evaluating cluster nodes..." | |
$nodes = Get-ClusterNode -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Name | |
if ($nodes -ne $null) { | |
foreach ($node in $nodes) { | |
if ($hostName -eq $node) { | |
$clusterEval = $true | |
Write-Verbose -Message "Hostname was found among cluster nodes." | |
} | |
} | |
Write-Verbose -Message "Cluster node evaulation complete." | |
} | |
} | |
else { | |
Write-Verbose -Message "Cluster service is not running. Cluster cmdlets not possible. Switching to registry evaluation..." | |
$clusterRegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\ClusSvc\Parameters" | |
$clusterNodeNames = Get-ItemProperty -Path $clusterRegistryPath -ErrorAction SilentlyContinue | Select-Object -ExpandProperty NodeNames -ErrorAction Stop | |
if ($clusterNodeNames -ne $null) { | |
if ($clusterNodeNames -like "*$hostName*") { | |
$clusterEval = $true | |
Write-Verbose -Message "Hostname was found in cluster registy settings" | |
} | |
else { | |
Write-Verbose -Message "Hostname was not found in cluster registry settings." | |
} | |
} | |
} | |
} | |
else { | |
Write-Verbose -Message "No cluster service was found." | |
} | |
} | |
catch { | |
Write-Verbose -Message "There was an error determining if this server is part of a cluster." | |
Write-Error $_ | |
} | |
return $clusterEval | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment