DSCResources/CircleChoco/CircleChoco.schema.psm1

Configuration CircleChoco {
    Import-DscResource -Module cChoco

    LocalConfigurationManager {
        DebugMode = 'ForceModuleImport'
    }

    cChocoInstaller installChoco
    {
        InstallDir = 'C:\ProgramData\Chocolatey'
    }

    cChocoFeature allowGlobalConfirmation {
        FeatureName = 'allowGlobalConfirmation'
        DependsOn   = '[cChocoInstaller]installChoco'
    }

    $CircleCIUser = "circleci"
    $ImportHelpers = @'
# Chocolatey profile
$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
if (Test-Path($ChocolateyProfile)) {
    Import-Module $ChocolateyProfile
}
refreshenv >$null 2>&1
'@


    $CircleCIProfile = "C:\Users\$CircleCIUser\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
    File CircleChocoProfile
    {
        DestinationPath = $CircleCIProfile
        Contents        = $ImportHelpers
    }

    $raw_password = [System.Web.Security.Membership]::GeneratePassword(42, 10)
    $password = ConvertTo-SecureString $raw_password -AsPlainText -Force
    $username = 'circleci'
    $cred = New-Object System.Management.Automation.PSCredential ($username, $password)

    Script SetProfileACL {
        GetScript  = {
            $TargetAcl = Get-Acl "C:\Users\$using:CircleCIUser\Documents"
            $PowerShellModuleAcl = Get-Acl "C:\Users\$using:CircleCIUser\Documents\WindowsPowerShell"
            $ProfileAcl = Get-Acl $using:CircleCIProfile

            return @{
                Result = @{
                    PsmAcl     = $PowerShellModuleAcl;
                    ProfileAcl = $ProfileAcl
                    TargetAcl  = $TargetAcl
                }
            }
        }
        TestScript = {
            $state = [scriptblock]::Create($GetScript).Invoke().Result
            If ($state.PsmAcl -eq $state.TargetAcl -and $state.ProfileAcl -eq $state.targetAcl) {
                return $True
            }
            else {
                return $False
            }
        }
        SetScript  = {
             $TargetAcl = Get-Acl "C:\Users\$using:CircleCIUser\Documents"
             Set-Acl -Path "C:\Users\$using:CircleCIUser\Documents\WindowsPowerShell" -AclObject $TargetAcl
             Set-Acl -Path $using:CircleCIProfile -AclObject $using:TargetAcl
        }
        DependsOn  = '[File]CircleChocoProfile'
        PsDscRunAsCredential = $cred
    }
}