DSCResources/TAMZ_cPowerPlan/TAMZ_cPowerPlan.psm1

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $PlanName
    )
    $CurrPerf = $(powercfg -getactivescheme)
    $CurrStart = $CurrPerf.IndexOf("(")+1
    $CurrEnd = $CurrPerf.Length-$CurrStart-1
    $CurrPerfName =$CurrPerf.Substring($CurrStart,$CurrEnd)

    $returnValue =@{
        PlanName = $CurrPerfName
    }
    $returnValue
}

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $PlanName
    )

    Write-Verbose -Message "Setting Powerplan to $PlanName" 
    Try 
    {
        $ReqPerf = powercfg -l | %{if($_.contains($PlanName)) {$_.split()[3]}}
        $CurrPlan = $(powercfg -getactivescheme).split()[3]
        if ($CurrPlan -ne $ReqPerf) {powercfg -setactive $ReqPerf}
    }
    
    Catch 
    {
        Write-Warning -Message "Unable to set power plan"
    }

}


function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $PlanName
    )

    $ElementGuid = $(powercfg -getactivescheme).split()[3]
    $ReqPerfGuid = powercfg -l | %{if($_.contains($PlanName)) {$_.split()[3]}}
    $ReqPerf = powercfg -l | Where-Object {$_.contains($PlanName)}
    $ElementStart = $ReqPerf.IndexOf("(")+1
    $ElementEnd = $Reqperf.Length -$ElementStart -3
    
    $CurrPerf = $(powercfg -getactivescheme)
    $CurrStart = $CurrPerf.IndexOf("(")+1
    $CurrEnd = $CurrPerf.Length-$CurrStart-1
    $CurrPerfName =$CurrPerf.Substring($CurrStart,$CurrEnd)

    If($ElementGuid -eq $ReqPerfGuid)
    {
        Write-Verbose -Message "PowerPlan is set to $PlanName Already"
        return $true
    }
    else
    {
        Write-Verbose -Message "PowerPlan is $CurrPerfName Expect $PlanName"
        return $false
    }
}



Export-ModuleMember -Function *-TargetResource