Creating default value for a variable

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.

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.

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