DSCClassResources/ClusterParameter/ClusterParameter.psm1
[DscResource()] class ClusterParameter { [DscProperty(Mandatory)] [string] $ClusterName [DscProperty(Mandatory=$false)] [String]$NodeName = $env:COMPUTERNAME [DscProperty(Key)] [String]$PropertyName [DscProperty(Mandatory)] [String]$Value [DscProperty(Key)] [String]$ClusterResourceName [DscProperty(NotConfigurable)] [String]$Type # Gets the resource's current state. [ClusterParameter] Get() { $clusterResource = Get-ClusterResource -Name $this.ClusterResourceName $this.Value = ($clusterResource | Get-ClusterParameter -Name $this.PropertyName).Value $this.Type = ($clusterResource | Get-ClusterParameter -Name $this.PropertyName).ParameterType return $this } # Sets the desired state of the resource. [void] Set() { $clusterResource = Get-ClusterResource -Name $this.ClusterResourceName Write-Verbose "Cluster Resource is: $($clusterResource.Name)" Write-Verbose "Parameter Type is $($this.PropertyName)" $ClusterResource = Get-ClusterResource -Name $this.ClusterResourceName $ClusterResource | Set-ClusterParameter -Name $this.PropertyName -Value $this.Value Write-Verbose -Message 'Restarting network name ressource (synchronously)' Stop-ClusterResource -Name $this.ClusterResourceName Write-Verbose -Message 'Starting Cluster Group of modified resource' Start-ClusterGroup -Name $ClusterResource.OwnerGroup } # Tests if the resource is in the desired state. [bool] Test() { try { $clusterResource = Get-ClusterResource -Name $this.ClusterResourceName $currentValue = ($clusterResource | Get-ClusterParameter -Name $this.PropertyName).Value switch ($this.PropertyName) { "Address" { $ipAddress = ($this.Value -split "/")[0] if ($currentValue -eq $ipAddress) { return $true } else { return $false } } default { if ($currentValue -eq $this.Value) { return $true } else { return $false } } } return $false } catch { Write-Verbose "Could not resolve Cluster Resource" return $false } } } |