Dargslan.WinVPNConfig.psm1

<#
.SYNOPSIS
    Windows VPN configuration audit toolkit — VPN connections, protocols, authentication methods, split tunneling, and always-on VPN status
.DESCRIPTION
    2026 Edition — Dargslan Windows Admin Toolkit.
    https://dargslan.com | https://dargslan.com/cheat-sheets
.LINK
    https://dargslan.com
#>


function Get-VPNAudit {
    <#
    .SYNOPSIS
        Audit VPN connections and configuration
    .DESCRIPTION
        Part of Dargslan.WinVPNConfig (2026 Edition) — https://dargslan.com
    #>

    [CmdletBinding()] param([switch]$Json)
    $report = [ordered]@{
        VPNConnections = Get-VpnConnection -ErrorAction SilentlyContinue | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod, SplitTunneling, ConnectionStatus, EncryptionLevel, L2tpIPsecAuth, RememberCredential
        RASConnections = Get-CimInstance Win32_NetworkAdapter -Filter "NetConnectionID LIKE \"%VPN%\" OR NetConnectionID LIKE \"%Tunnel%\"" -ErrorAction SilentlyContinue | Select-Object Name, NetConnectionID, NetConnectionStatus
        AlwaysOnVPN = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\NetworkConnectivity*" -ErrorAction SilentlyContinue
        RASService = Get-Service RemoteAccess -ErrorAction SilentlyContinue | Select-Object Status, StartType
        Warnings = @()
    }
    $report.VPNConnections | Where-Object SplitTunneling -eq $true | ForEach-Object { $report.Warnings += "VPN $($_.Name) uses split tunneling" }
    $report.VPNConnections | Where-Object RememberCredential -eq $true | ForEach-Object { $report.Warnings += "VPN $($_.Name) stores credentials" }
    $report.Summary = [PSCustomObject]@{
        VPNConnections = ($report.VPNConnections | Measure-Object).Count
        Connected = ($report.VPNConnections | Where-Object ConnectionStatus -eq "Connected" | Measure-Object).Count
        SplitTunnel = ($report.VPNConnections | Where-Object SplitTunneling -eq $true | Measure-Object).Count
    }
    if ($Json) { return $report | ConvertTo-Json -Depth 3 }
    Write-Host "`n [VPN Audit - 2026]" -ForegroundColor Cyan
    $report.Summary | Format-List
    if ($report.VPNConnections) { $report.VPNConnections | Format-Table Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling -AutoSize }
    if ($report.Warnings) { $report.Warnings | ForEach-Object { Write-Host " Warning: $_" -ForegroundColor Yellow } }
    return $report
}

Export-ModuleMember -Function *