public/stigData.ps1

#region Header
using module .\..\private\stigData.psm1
#endregion Header
#region Data
$defaultParameterList = 'StigException|OrganizationSettingsPath|StigTitlePrefix|StigTitleSuffix|SkippedRule|SkippedRuleType'
#endregion Data
#region Main Functions
<#
    .SYNOPSIS
        A proxy function to get the Stig Content from the Windows Server STIG.
 
    .DESCRIPTION
        Sets parameters that are used used to filter an additional set of dynamic parameters.
 
        DYNAMIC PARAMETERS
 
        This function uses several dynamic parmaters that filter the validateset automatilcaly bassed on values provided to OsVersion and OsRole.
        For more information on the Common STIG parameters, Please run 'Get-Help Get-CommonStigParameters -Full'
 
    .PARAMETER OsVersion
        Filters the STIG version to the OS version.
 
    .PARAMETER OsRole
        Filters the STIG version list to the Domain Controller (DC) or Member Server (MS) role.
#>

function Get-WindowsServerStigData
{
    [CmdletBinding()]
    [outputtype([psobject])]
    Param
    (
        [Parameter(Mandatory = $true)]
        [ValidateSet('2012R2','2016')]
        [string]
        $OsVersion,
        
        [Parameter(Mandatory = $true)]
        [ValidateSet('DC','MS')]
        [string]
        $OsRole
    )
    
    DynamicParam 
    {
        try
        {
            $CommonStigParameters = @{
                Technology        = 'WindowsServer' 
                TechnologyVersion = $OsVersion 
                TechnologyRole    = $OsRole
            }
            
            Get-CommonStigParameters @CommonStigParameters 
        }
        catch
        {
            Write-Error $Error[0]
            Write-Warning "Please run 'Get-Help Get-CommonStigParameters -Full' "
        }
    }
    
    begin 
    {
        ################################ Begin Set file path from #################################
        $fileName = "$OsVersion-$OsRole-$($PSBoundParameters['StigVersion']).xml"
        $path = "$(Get-StigDataRootPath)\WindowsServer\$fileName"
        Write-Verbose "$fileName exists --> $(Test-Path -Path $path ) "
        ################################ End Set file path from #################################
        ##################### Begin Standard entry on all public functions ######################
        $PSBoundParameters.Keys -notmatch $defaultParameterList | 
            ForEach-Object { $PSBoundParameters.Remove($PSItem) | Out-Null}
        $PSBoundParameters.Add('Path',$path)
        ##################### End Standard entry on all public functions ######################
    }

    end
    {
        Get-StigData @PSBoundParameters
    }
}

function Get-WindowsFirewallStigData
{
    [CmdletBinding()]
    Param( )
 
    DynamicParam 
    {
        try
        {
            $CommonStigParameters = @{
                Technology = 'WindowsFirewall' 
            }
            
            Get-CommonStigParameters @CommonStigParameters 
        }
        catch
        {
            Write-Error $Error[0]
            Write-Warning "Please run 'Get-Help Get-CommonStigParameters -Full' "
        }
    }

    begin 
    {
        ################################ Begin Set file path from #################################
        $fileName = "$($PSBoundParameters['StigVersion']).xml"
        $path = "$(Get-StigDataRootPath)\WindowsFirewall\$fileName"
        Write-Verbose "$fileName exists --> $(Test-Path -Path $path ) "
        ################################ End Set file path from #################################
        ##################### Begin Standard entry on all public functions ######################
        $PSBoundParameters.Keys -notmatch $defaultParameterList | 
            ForEach-Object { $PSBoundParameters.Remove($PSItem) | Out-Null}
        $PSBoundParameters.Add('Path', $path)
        ##################### End Standard entry on all public functions ######################
    }

    end
    {
        Get-StigData @PSBoundParameters
    }
}

function Get-WindowsDnsServerStigData
{
    [CmdletBinding()]
    [outputtype([PSObject])]
    Param
    (
        [Parameter(Mandatory = $true)]
        [ValidateSet('2012R2')]
        [string]
        $OsVersion
    )
    
    DynamicParam 
    {
        try
        {
            $CommonStigParameters = @{
                Technology        = 'WindowsDnsServer' 
                TechnologyVersion = $OsVersion 
            }
            
            Get-CommonStigParameters @CommonStigParameters 
        }
        catch
        {
            Write-Error $Error[0]
            Write-Warning "Please run 'Get-Help Get-CommonStigParameters -Full' "
        }
    }
    
    begin 
    {
        ################################ Begin Set file path from #################################
        $OsRole = "DNS"
        $fileName = "$OsVersion-$OsRole-$($PSBoundParameters['StigVersion']).xml"
        $path = "$(Get-StigDataRootPath)\WindowsDnsServer\$fileName"
        Write-Verbose "$fileName exists --> $(Test-Path -Path $path ) "
        ################################ End Set file path from #################################
        ##################### Begin Standard entry on all public functions ######################
        $PSBoundParameters.Keys -notmatch $defaultParameterList | 
            ForEach-Object { $PSBoundParameters.Remove($PSItem) | Out-Null}
        $PSBoundParameters.Add('Path', $path)
        ##################### End Standard entry on all public functions ######################
    }

    end
    {
        Get-StigData @PSBoundParameters
    }
}

function Get-WindowsDnsServerStigData
{
    [CmdletBinding()]
    [outputtype([PSObject])]
    Param
    (
        [Parameter(Mandatory = $true)]
        [ValidateSet('2012R2')]
        [string]
        $OsVersion
    )
    
    DynamicParam 
    {
        try
        {
            $CommonStigParameters = @{
                Technology        = 'WindowsDnsServer' 
                TechnologyVersion = $OsVersion 
            }
            
            Get-CommonStigParameters @CommonStigParameters 
        }
        catch
        {
            Write-Error $Error[0]
            Write-Warning "Please run 'Get-Help Get-CommonStigParameters -Full' "
        }
    }
    
    begin 
    {
        ################################ Begin Set file path from #################################
        $OsRole = "DNS"
        $fileName = "$OsVersion-$OsRole-$($PSBoundParameters['StigVersion']).xml"
        $path = "$(Get-StigDataRootPath)\WindowsDnsServer\$fileName"
        Write-Verbose "$fileName exists --> $(Test-Path -Path $path ) "
        ################################ End Set file path from #################################
        ##################### Begin Standard entry on all public functions ######################
        $PSBoundParameters.Keys -notmatch $defaultParameterList | 
            ForEach-Object { $PSBoundParameters.Remove($PSItem) | Out-Null}
        $PSBoundParameters.Add('Path', $path)
        ##################### End Standard entry on all public functions ######################
    }

    end
    {
        Get-StigData @PSBoundParameters
    }
}
#endregion Main Functions
#region Support Functions
<#
    .SYNOPSIS
        A discovery function that returns data about available SITG's in the module
 
    .PARAMETER Name
        The name of the technology that the STIG targets such as Windows Server or RHEL
 
    .PARAMETER ListAvailable
        A swtich that retunrs all available STIGs
 
    .EXAMPLE
        In this example all WindowsServer STIG details are returned.
 
        Get-Stig -Name WindowsServer
     
    .EXAMPLE
        In this example a list of all available STIGS is returned.
 
        Get-Stig -ListAvailable
#>

function Get-StigList
{
    [outputtype([psobject[]])]
    param
    (
        [parameter()]
        [string]
        $Technology
    )

    $childItemParameters = @{
        Path = "$(Get-StigDataRootPath)\$Technology"
        Exclude = "*.org.*" 
        Include = "*.xml" 
        File = $true
        Recurse = $true
    }
    
    $stigList = Get-ChildItem @childItemParameters

    [System.Collections.ArrayList] $returnlist = @() 
    
    foreach ($stig in $stigList)
    {
        $stigProperties = $stig.BaseName -Split "-"

        $stigPropertyList = New-Object PSobject
        $stigPropertyList | Add-Member -MemberType NoteProperty -Name 'Technology' -Value (Split-Path -Path $stig.Directory -Leaf)
        $stigPropertyList | Add-Member -MemberType NoteProperty -Name 'StigVersions' -Value $stigProperties[-1]
        $stigPropertyList | Add-Member -MemberType NoteProperty -Name 'TechnologyVersion' -Value $stigProperties[-3]
        $stigPropertyList | Add-Member -MemberType NoteProperty -Name 'TechnologyRole' -Value $stigProperties[-2]

        [void] $returnlist.Add($stigPropertyList)
    } 

    return $returnlist  
}
#endregion Support Functions