DSCResources/Resources/windows.Registry.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

$rules = $stig.RuleList | Select-Rule -Type RegistryRule

foreach ($rule in $rules)
{
    if ($rule.ValueType -eq 'MultiString' -and $null -ne $rule.ValueData)
    {
        $valueData = $rule.ValueData.Split("{;}")
    }
    elseif ($null -eq $rule.ValueData)
    {
        # The registry resource's SET will require an empty string array instead of $null
        $valueData = @('')
    }
    else
    {
        $valueData = $rule.ValueData
    }

    if ($valueData -eq 'ShouldBeAbsent')
    {
        $rule.Ensure = 'Absent'
    }

    switch ($rule.dscresource)
    {
        'RegistryPolicyFile'
        {
            if ($rule.key -match 'HKEY_CURRENT_USER')
            {
                $TargetType = 'UserConfiguration'
            }
            else
            {
                $TargetType = 'ComputerConfiguration'
            }

            RegistryPolicyFile (Get-ResourceTitle -Rule $rule)
            {
                Key        = $rule.key -replace 'HKEY_LOCAL_MACHINE\\|HKEY_CURRENT_USER\\'
                TargetType = $TargetType
                ValueName  = $rule.ValueName
                ValueData  = $valueData
                ValueType  = $rule.ValueType
                Ensure     = $rule.Ensure
            }
        }

        'Registry'
        {
            # When adding/removing 'Keys' the resource requires an empty string for ValueName
            if ($null -eq $rule.ValueName)
            {
                $rule.ValueName = [string]::Empty
            }

            if ($rule.Ensure -eq 'Absent')
            {
                Registry (Get-ResourceTitle -Rule $rule)
                {
                    Key       = $rule.Key -replace 'HKEY_LOCAL_MACHINE', 'HKLM:'
                    ValueName = $rule.ValueName
                    Ensure    = $rule.Ensure
                    Force     = $true
                }
            }
            else
            {
                Registry (Get-ResourceTitle -Rule $rule)
                {
                    Key       = $rule.Key
                    ValueName = $rule.ValueName
                    ValueData = $valueData
                    ValueType = $rule.ValueType
                    Ensure    = $rule.Ensure
                    Force     = $true
                }
            }
        }
    }
}