DSCResources/EventStoreStartupTask/EventStoreStartupTask.psm1

function Test-EventStoreStartupTask()
{
    [OutputType('System.Boolean')]
    [Cmdletbinding()]
    Param(
        [String] $taskname
    )

    $task= Get-ScheduledTask | Where-Object { $_.TaskName -eq $taskname }
    If ( $task )
    {

        Write-Verbose ":: task with name found"
        return $true;
    }

    return $false
}

function New-EventStoreStartupTask()
{
    [Cmdletbinding()]
    Param(
        [String] $taskname,
        [String] $dir
    )

    $ex = "start.cmd"

    If ( Get-ScheduledTask | Where-Object { $_.TaskName -eq $taskname } )
    {
        Write-Verbose ":: Unregister existing Task"
        Unregister-ScheduledTask $taskname -Confirm:$false
    }

    $trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30

    Write-Verbose ":: New-ScheduledTaskAction -Execute $ex -WorkingDirectory $dir"
    $action =  New-ScheduledTaskAction -Execute $ex -WorkingDirectory $dir

    $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
    Write-Verbose ":: Register Scheduled Task"
    Register-ScheduledTask -TaskName $taskname -Trigger $trigger -Action $action -Principal $principal -ThrottleLimit 0

    Write-Information "!"

}


function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [Parameter(Mandatory = $true)] [String] $TaskName,
        [Parameter(Mandatory = $true)] [string] $Directory
    )

    Write-Verbose 'Start Get-TargetResource'
    Write-Verbose "TaskName: $TaskName"

    $exists=Test-EventStoreStartupTask -taskname $TaskName

    $returnValue = @{
        TaskName = $TaskName
        Exists = $exists
    }

    $returnValue
}

function Set-TargetResource
{
    [CmdletBinding(SupportsShouldProcess = $true)]
    param
    (
        [Parameter(Mandatory = $true)] [String] $TaskName,
        [Parameter(Mandatory = $true)] [string] $Directory
    )

    Write-Verbose 'Start Set-TargetResource'
    Write-Verbose "TaskName: $TaskName"

    New-EventStoreStartupTask -taskname $TaskName -dir $Directory
}

function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory = $true)] [String] $TaskName,
        [Parameter(Mandatory = $true)] [string] $Directory
    )

    $ret = (Test-EventStoreStartupTask -taskname $TaskName)

    Write-Host "EventStoreStartupTask: $TaskName Exists: $ret"

    if ($ret -eq "False") {
        return $true;
    }

    return $false;
}

Export-ModuleMember -Function *-TargetResource