DSCResources/cChocoFeature/cChocoFeature.psm1
# Copyright (c) 2017 Chocolatey Software, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. <# .Description Returns the configuration for cChocoFeature. .Example Get-TargetResource -FeatureName allowGlobalConfirmation -Ensure 'Present' #> function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $FeatureName, [ValidateSet('Present','Absent')] [System.String] $Ensure='Present' ) Write-Verbose "Starting cChocoFeature Get-TargetResource - Feature Name: $FeatureName, Ensure: $Ensure" $returnValue = @{ FeatureName = $FeatureName Ensure = $Ensure } $returnValue } <# .Description Performs the set for the cChocoFeature resource. .Example Get-TargetResource -FeatureName allowGlobalConfirmation -Ensure 'Present' #> function Set-TargetResource { [CmdletBinding(SupportsShouldProcess=$true)] param ( [parameter(Mandatory = $true)] [System.String] $FeatureName, [ValidateSet('Present','Absent')] [string] $Ensure='Present' ) Write-Verbose "Starting cChocoFeature Set-TargetResource - Feature Name: $FeatureName, Ensure: $Ensure." if ($pscmdlet.ShouldProcess("Choco feature $FeatureName will be ensured $Ensure.")) { if ($Ensure -eq 'Present') { Write-Verbose "Enabling choco feature $FeatureName." choco feature enable -n $FeatureName } else { Write-Verbose "Disabling choco feature $FeatureName." choco feature disable -n $FeatureName } } } <# .Description Performs the test for cChocoFeature. .Example Test-TargetResource -FeatureName allowGlobalConfirmation -Ensure 'Present' #> function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $FeatureName, [ValidateSet('Present','Absent')] [System.String] $Ensure='Present' ) Write-Verbose "Starting cChocoFeature Test-TargetResource - Feature Name: $FeatureName, Ensure: $Ensure." $result = $false $feature = Get-ChocoFeature -FeatureName $FeatureName | Where-Object {$_.State -eq "Enabled"} if (($Ensure -eq 'Present' -and ([bool]$feature)) -or ($Ensure -eq 'Absent' -and !([bool]$feature))) { Write-Verbose "Test-TargetResource is true, $FeatureName is $Ensure." $result = $true } else { Write-Verbose "Test-TargetResource is false, $FeatureName is not $Ensure." } return $result } <# .Description Query chocolatey features. #> function Get-ChocoFeature { [OutputType([PSCustomObject])] param( [string] $FeatureName ) choco feature -r | ConvertFrom-Csv -Delimiter "|" -Header Name, State, Description | Where-Object Name -eq $FeatureName } Export-ModuleMember -Function *-TargetResource |