Module/Common/Common.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
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

#region Enum
<#
    STIGS have an associated severity that determines the impact of the finding if it
    is not configured properly
#>

enum severity
{
    low
    medium
    high
}

<#
    The category enum is used to define category and will assist in converting to [severity]
    Do not change the order of either the severity enum or the category enum
#>

enum category
{
    CAT_III
    CAT_II
    CAT_I
}

<#
    The status enum is used to display the status of the STIG item processing
#>

enum status
{
    pass
    warn
    fail
}

<#
    The process enum is used as a flag for further automation. The intent is that if a STIG
    has been fully processed, then the setting can be automatically published to a server. If
    a setting has not been fully processed then it needs to be manually processed. This is
    different from the status enum in that status is a control flag to describe the state
    of the item processing
#>

enum process
{
    auto
    manual
}

enum ensure
{
    Present
    Absent
}

#endregion

#region RegexClass

class RegularExpression
{
    static [string[]] $TextBetweenQuotes = '["''](.*?)["'']'
    static [bool] MatchTextBetweenQuotes([string] $string)
    {
        return $string -Match [RegularExpression]::TextBetweenQuotes
    }

    static [string[]] $TextBetweenParentheses = '\(([^\)]+)\)'
    static [bool] MatchTextBetweenParentheses([string] $string)
    {
        return $string -Match [RegularExpression]::TextBetweenParentheses
    }

    static [string[]] $CustomFieldSection = 'Under "Custom Fields", verify the following fields'
    static [bool] MatchCustomFieldSection([string] $string)
    {
        return $string -Match [RegularExpression]::CustomFieldSection
    }

    static [string[]] $ExcludeExtendedAscii = '[^\x20-\x7A]+'
    static [bool] MatchExcludeExtendedAscii([string] $string)
    {
        return $string -Match [RegularExpression]::ExcludeExtendedAscii
    }

    static [string[]] $KeyValuePair = '(?<=\").+?(?=\")'
    static [bool] MatchKeyValuePair([string] $string)
    {
        return $string -Match [RegularExpression]::KeyValuePair
    }
}
#endregion

foreach ($supportFile in (Get-ChildItem -Path $PSScriptRoot -Recurse -File -Exclude $MyInvocation.MyCommand.Name))
{
    Write-Verbose "Loading $($supportFile.FullName)"
    . $supportFile.FullName
}

Export-ModuleMember -Function '*' -Variable '*'