VB.DNSEnrichment.psd1

#
# Module manifest for module 'VB.DNSEnrichment'
# Generated: 2026-05-10
# Author : Vibhu Bhatnagar
#

@{

    # -- Module identity
    ModuleVersion     = '0.5.0'
    GUID              = '4bbf090c-c895-4a7f-babd-fa826a1787c1'
    Author            = 'Vibhu Bhatnagar'
    CompanyName       = 'pwsh.in'
    Copyright         = '(c) 2026 Vibhu. All rights reserved.'
    Description       = 'Resolve private IP addresses to hostname, MAC, vendor, and device class through an 11-step enrichment pipeline. Persists results in SQLite for cross-run caching and DHCP churn analysis.'

    # -- Runtime requirements
    PowerShellVersion = '5.1'

    # -- Module entry point
    RootModule        = 'VB.DNSEnrichment.psm1'

    # -- Required modules (must be installed before importing VB.DNSEnrichment)
    RequiredModules   = @(
        @{ ModuleName = 'PSSQLite'; ModuleVersion = '1.0.0' }
    )

    # -- Exported public functions (Private functions are NOT listed here)
    # Round 1 ships only the context/storage layer; subsequent rounds add layers.
    FunctionsToExport = @(
        'Get-VBEnrichmentContext',
        'Initialize-VBEnrichmentDatabase',
        'Get-VBADComputer',
        'Get-VBDHCPLease',
        'Get-VBPTRRecord',
        'Get-VBARPEntry',
        'Resolve-VBDeviceClass',
        'Invoke-VBIPEnrichment',
        'Get-VBEnrichmentResult',
        'Export-VBEnrichmentResult',
        'Get-VBTCPFingerprint',
        'Get-VBHTTPBanner',
        'Get-VBSNMPIdentity',
        'Get-VBOUIVendor',
        'Get-VBRTSPBanner',
        'Get-VBmDNSRecord',
        'Get-VBSwitchARP'
    )

    # -- Not exporting cmdlets, variables, or aliases
    CmdletsToExport   = @()
    VariablesToExport = @()
    AliasesToExport   = @()

    # -- Module metadata
    PrivateData = @{
        PSData = @{
            Tags         = @('DNS', 'Enrichment', 'IP', 'SQLite', 'AD', 'DHCP', 'SNMP', 'Networking', 'RTSP', 'mDNS', 'PowerShell', 'Sysadmin', 'Windows', 'MSP', 'Automation', 'VBTools')
            ProjectUri   = 'https://github.com/Vibhu2/ITAdmin_Tools/tree/main/VB.DNSEnrichment'
            LicenseUri   = 'https://github.com/Vibhu2/ITAdmin_Tools/blob/main/LICENSE'
            HelpInfoUri  = 'https://pwsh.in/posts/'
            ReleaseNotes = @"
v0.4.0 (2026-05-11) -- Round 4: Sensor layers (RTSP, mDNS, Switch ARP) + PS7 parallel active probes
- Get-VBRTSPBanner (Layer 8): TCP 554 banner grab; high-confidence camera/NVR signal
- Get-VBmDNSRecord (Layer 9): dns-sd.exe browse+resolve for 5 service types; one-shot session cache
- Get-VBSwitchARP (Layer 10): SNMP walk of ARP/FDB/ifAlias on managed switches; one-shot session cache
- Invoke-VBIPEnrichment: PS7 ForEach-Object -Parallel for active probes (steps 5-11) when Context.CanUseParallel; passive layers always sequential; classification + SQLite always sequential
 
v0.3.0 (2026-05-11) -- Round 3: Active probe layers (TCP, HTTP, SNMP, OUI)
- Get-VBTCPFingerprint: 24-port async concurrent scan using BeginConnect/WaitOne (~300 ms)
- Get-VBHTTPBanner: title + Server header, PS 5.1 cert callback workaround, 4-port fallback chain
- Get-VBSNMPIdentity: olePrn COM sysDescr/sysName/sysLocation, community string iteration
- Get-VBOUIVendor: IEEE OUI CSV auto-download + 30-day refresh, session hashtable cache, vendor->class map
- Invoke-VBIPEnrichment: active probe stubs replaced; SNMP gates on context flag; OUI always runs if MAC known
- Orchestrator now wires HTTP/SNMP hostname resolution into IsResolved gate
 
v0.2.0 (2026-05-11) -- Round 2: Passive layers + orchestrator (Phase 6 ship gate)
- Get-VBADComputer (Layer 1): one-shot AD cache, OSClass/OU detection
- Get-VBDHCPLease (Layer 2): one-shot DHCP lease cache across all scopes
- Get-VBPTRRecord (Layer 3): PTR lookup with forward-confirmation, PS5.1 fallback
- Get-VBARPEntry (Layer 4): arp -a cache with optional ping-to-populate
- Resolve-VBDeviceClass: 13-tier classification logic (pure signal -> class)
- Invoke-VBIPEnrichment: orchestrator with SQLite cache, stale-row detection, DHCP churn history
- Get-VBEnrichmentResult: SQLite query with IP/class/date/unresolved filters
- Export-VBEnrichmentResult: CSV (UTF-8 BOM) / JSON / Object pipeline pass-through
 
v0.1.0 (2026-05-10) -- Round 1: Skeleton + Context + Storage
- Module skeleton (manifest, loader, .editorconfig)
- Sql/001_init.sql schema (Enrichment, EnrichmentHistory, SchemaVersion)
- Private helpers: Test-VBPrivateIP, ConvertTo-VBNormalisedMAC, New-VBLayerResult, Invoke-VBSqliteCommand, Write-VBEnrichmentProgress
- Get-VBEnrichmentContext (14 prerequisite checks + console report)
- Initialize-VBEnrichmentDatabase (idempotent schema migration)
"@

        }
    }

}