DSCResources/cSNMPCommunity/cSNMPCommunity.psm1

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
function Get-TargetResource {
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param (
        [parameter(Mandatory = $true)]
        [System.String]
        $Community,

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

        [parameter(Mandatory = $true)]
        [System.String]
        $Ensure
    )
    
    $Communities = [PSCustomObject](Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities").psbase.properties | ? { 
            $_.Name -notin @('PSDrive','PSProvider','PSCHildName','PSPath','PSParentPath') 
         } | Select Name,Value
    
    if ($Communities) {
    
        $ReturnValue = @{
            Community=$Communities.Value
        }
    }
    else {
        $ReturnValue = @{
            CommunityList="None"
        }
    }
    $ReturnValue
}


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

        [parameter(Mandatory = $true)]
        [ValidateSet("None","Notify","ReadOnly","ReadWrite","ReadCreate")]
        [System.String]
        $Right,

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

     Switch ($Right) {
        "None" { $RightNumber = 1 }
        "Notify" { $RightNumber = 2 }
        "ReadOnly" { $RightNumber = 4 }
        "ReadWrite" { $RightNumber = 8 }
        "ReadCreate" { $RightNumber = 16 }
    }
    switch ($Ensure) {
        "Present" { 
            Write-Verbose "Addind community to the allowed list"
            New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities -Name $Community -Value $RightNumber -PropertyType DWORD -Force
        }
        "Absent" {
            Write-Verbose "Removing community from the allowed list"
            if (Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities\$community) {
                Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities -Name $Community -Force
            }
        }
    
    }
}


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

        [parameter(Mandatory = $true)]
        [ValidateSet("None","Notify","ReadOnly","ReadWrite","ReadCreate")]
        [System.String]
        $Right,

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

    $Communities = [PSCustomObject](Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities").psbase.properties | ? { 
            $_.Name -notin @('PSDrive','PSProvider','PSCHildName','PSPath','PSParentPath') 
         } | Select Name,Value
    Switch ($Right) {
            "None" { $RightNumber = "1" }
            "Notify" { $RightNumber = "2" }
            "ReadOnly" { $RightNumber = "4" }
            "ReadWrite" { $RightNumber = "8" }
            "ReadCreate" { $RightNumber = "16" }
    }
    #Building the Hashtable
    if ($Communities) {
        $Communities | ? { $_.Name -eq $Community } | % { 
        [String]$RegistryRight = $_.Value
            if ($Ensure -eq "Present") {
                if ($RegistryRight.trim() -eq $RightNumber) { $Return = $true }
                else { $Return = $false }
            }
            elseif ($Ensure -eq "Absent") {
                if ($RegistryRight.trim() -eq $RightNumber) { $Return = $false }
                else { $Return = $true }
            }
        }
    }
    else {
        $Return = $false
    }
    $Return
}


Export-ModuleMember -Function *-TargetResource