DSCResources/POSHOrigin_POSHFolder/POSHOrigin_POSHFolder.psm1


$msgs = Import-LocalizedData -FileName messages.psd1

function Get-TargetResource {
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param (
        [parameter(Mandatory = $true)]
        [System.String]
        $Name,

        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure,

        [parameter(Mandatory = $true)]
        [System.String]
        $Path
    )

    $folder = Get-FolderStatus @PSBoundParameters
    return $folder
}

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

        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure,

        [parameter(Mandatory = $true)]
        [System.String]
        $Path
    )
   
    $folder = Get-FolderStatus @PSBoundParameters

    switch ($Ensure) {
        'Present' {
            if (-Not $folder.Exists) {
                Write-Verbose -Message ($msgs.str_creating_folder -f $folder.FullPath)
                New-Item -ItemType Directory -Path $folder.FullPath -Force
            }
        }
        'Absent' {
            if ($folder.Exists) {
                Write-Verbose -Message ($msgs.str_removing_folder -f $folder.FullPath)
                Remove-Item -Path $folder.FullPath -Force -Confirm:$false
            }
        }
    }
}

function Test-TargetResource {
    [CmdletBinding()]
    param(
        [parameter(Mandatory = $true)]
        [System.String]
        $Name,

        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure,

        [parameter(Mandatory = $true)]
        [System.String]
        $Path
    )

    $folder = Get-FolderStatus @PSBoundParameters

    switch ($Ensure) {
        'Present' {
            return $folder.Exists
        }
        'Absent' {
            return -Not $folder.Exists
        }
    }
}

function Get-FolderStatus {
    [cmdletbinding()]
    [OutputType([System.Collections.Hashtable])]
    param(
        [parameter(Mandatory)]
        [string]$Name,

        [parameter(Mandatory)]
        [ValidateSet('Present', 'Absent')]
        [string]$Ensure,

        [parameter(Mandatory)]
        [string]$Path
    )

    $returnValue = @{
        Name = $Name
        Ensure = $Ensure
        FullPath = (Join-Path -Path $Path -ChildPath $Name)
        Exists = Test-Path -Path (Join-Path -Path $Path -ChildPath $Name)
    }

    if ($returnValue.Exists) {
        Write-Verbose -Message ($msgs.gfs_folder_exists -f $returnValue.FullPath )
    } else {
        Write-Verbose -Message ($msgs.gfs_folder_not_exists -f $returnValue.FullPath )
    }

    return $returnValue
}

Export-ModuleMember -Function *-TargetResource