Author Posts

August 5, 2015 at 4:29 pm

I have a script that checks the resources of a Failover cluster. What I would like to have is a default value of the state set to offline to show offline resources if the parameter state is omitted. However what I am finding is that the way I have written is showing online resources even if the -parameter state is omitted

My script is below:

# ===========================================================================
# Created with: SAPIEN Technologies, Inc., PowerShell Studio 2015 v4.2.89
# Created on: 5/08/2015 11:59 a.m.
# Created by: weiyentan
# Organization:
# Filename: Get-ClusterResourceState.ps1
# ===========================================================================
Get-ClusterResourceState -clustername 'Cluster1'
This will show you the resources of the cluster Cluster1 that is listed OFFLINE
.EXAMPLE
PS C:\> Get-ClusterResourceState -clustername 'Cluster1' -state 'online'
This will check the cluster Cluster1 and check all the resources that are online.
#>

[CmdletBinding()]
param
(
[Parameter(Mandatory = $true,
Position = 1)]
[string]$clustername,
[Parameter(Mandatory = $false,
Position = 2)]
[string]$state = 'offline'
)
Import-Module FailoverClusters
Get-Cluster $clustername | Get-ClusterResource | Where-Object {"$_.state -eq '$state'"}

I think the problem that I am having is in this line: {"$_.state -eq '$state'"}

But I am not quite sure how to make that variable have a default value of offline. It shows online resources.

I have tried this line : {$_.state -eq '$state'} but that doesn't work either.

Any help appreciated.

August 5, 2015 at 4:32 pm

You've got some quirky quotation marks happening. It should look like this:

Where-Object { $_.State -eq $state }

# or

Where-Object { $_.State -eq "$state" }

In this case, the double quotes in the second example are irrelevant, since $state is a string and that's the whole value anyway.

August 5, 2015 at 6:28 pm

Thanks for the reply Dave. That seems to have done the trick!