Krit.Hardening.psm1

<#
.SYNOPSIS
    Krit.Hardening - Kritical Hardening toolkit (audit-only in v1.0.0).
.AUTHOR
    Joshua Finley - Kritical Pty Ltd - https://kritical.net
#>


Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

# 1.0.1 - soft-import Krit.OmniFramework. Never fail hard at import time even
# if Omni is missing or AppDomain-locked at an older version. Consuming
# functions probe for OmniFramework at use time and degrade gracefully.
function Import-KritHardenOmniSoft {
    [CmdletBinding()]
    param([switch] $Quiet)
    $already = Get-Module -Name Krit.OmniFramework -ErrorAction SilentlyContinue
    if ($already) { return @{ Ok=$true; Version=$already.Version; Source='already-loaded' } }
    $have = Get-Module -ListAvailable -Name Krit.OmniFramework -ErrorAction SilentlyContinue |
            Sort-Object Version -Descending | Select-Object -First 1
    if (-not $have) { return @{ Ok=$false; Version=$null; Source='not-installed' } }
    try {
        Import-Module -Name Krit.OmniFramework -ErrorAction Stop
        $loaded = Get-Module -Name Krit.OmniFramework | Select-Object -First 1
        return @{ Ok=$true; Version=$loaded.Version; Source='imported' }
    } catch {
        if (-not $Quiet.IsPresent) { Write-Warning ("Krit.OmniFramework soft-import failed: " + $_.Exception.Message) }
        return @{ Ok=$false; Version=$have.Version; Source='import-failed'; Error=$_.Exception.Message }
    }
}

try { Import-KritHardenOmniSoft -Quiet | Out-Null } catch { }

$here = Split-Path -Parent $PSCommandPath
foreach ($dir in 'Private','Public') {
    $folder = Join-Path $here $dir
    if (Test-Path -LiteralPath $folder) {
        Get-ChildItem -LiteralPath $folder -Filter '*.ps1' -File | Sort-Object Name | ForEach-Object {
            . $_.FullName
        }
    }
}

Export-ModuleMember -Function @(
    'Test-KritHardenPrereqs',
    'Install-KritHardenModules',
    'Get-KritHardenModuleStatus',
    'Test-KritHardenCompliance',
    'New-KritHardenReport',
    'Get-KritHardenBanner'
)