Private/ToolDefinitions.ps1
|
# The tools Start-NSPToolkit knows about, and what the shared plumbing needs to know about each: # where its module lives, how to start it, which answer fields are secrets, and where the old # zip-era installs left their files (for Move-NSPToolLegacyData). # # Name is the short key used everywhere else (work folder, hand-off files): AD, NPS, PKI, FortiClient. $script:NSPToolDefinitions = @( [pscustomobject]@{ Name = 'AD' DisplayName = 'AD Manager' Description = 'VPN groups and OUs, certificate auto-enrollment GPO, WMI filters, VPN inventory export.' ModuleName = 'NSP.ActiveDirectory' MinimumVersion = '0.1.0' EntryFunction = 'Start-NSPADManager' ShimFunction = 'New-NSPADShim' RequiresAdmin = $true Detect = { [bool](Get-Module -ListAvailable -Name ActiveDirectory) } DetectHint = 'ActiveDirectory module (RSAT) present' SecretFields = @() Legacy = [pscustomobject]@{ StagingFolder = 'ADStaging' ExtractFolder = 'ADManager' AnswersFile = 'ADAnswers.json' ShimNames = @('AD-Manager.ps1', 'AD-Manager-Shim.ps1') ShimAnswersVar = 'ADAnswersJson' FixedPaths = @() } } [pscustomobject]@{ Name = 'NPS' DisplayName = 'NPS Manager' Description = 'NPS / RADIUS: clients, policies, troubleshooting, NPS Extension, hand-back to the Orchestrator.' ModuleName = 'NSP.NPS' MinimumVersion = '0.1.0' EntryFunction = 'Start-NSPNpsManager' ShimFunction = 'New-NSPNpsShim' RequiresAdmin = $true Detect = { [bool](Get-Service -Name IAS -ErrorAction SilentlyContinue) } DetectHint = 'NPS service (IAS) installed' SecretFields = @('RADIUSSecret') Legacy = [pscustomobject]@{ StagingFolder = 'NPSStaging' ExtractFolder = 'NPSManager' AnswersFile = 'NPSAnswers.json' ShimNames = @('NPS-Manager.ps1', 'NPS-Manager_Shim.ps1') ShimAnswersVar = 'NPSAnswersJson' FixedPaths = @() } } [pscustomobject]@{ Name = 'PKI' DisplayName = 'PKI Manager' Description = 'Certificate Authority, templates, OCSP, TameMyCerts, App Proxy CRL, FortiGate certificate hand-off.' ModuleName = 'NSP.PKI' MinimumVersion = '0.1.0' EntryFunction = 'Start-NSPPkiManager' ShimFunction = 'New-NSPPkiShim' RequiresAdmin = $true Detect = { [bool](Get-Service -Name CertSvc -ErrorAction SilentlyContinue) } DetectHint = 'Certificate Services (CertSvc) installed' SecretFields = @('FortiGatePfxPassword') Legacy = [pscustomobject]@{ StagingFolder = 'CAStaging' ExtractFolder = 'CAManager' AnswersFile = 'CAAnswers.json' ShimNames = @('CA-Manager.ps1', 'CA-Manager-Shim.ps1') ShimAnswersVar = 'CAAnswersJson' FixedPaths = @() } } [pscustomobject]@{ Name = 'FortiClient' DisplayName = 'FortiClient Troubleshooting' Description = 'Endpoint FortiClient VPN troubleshooting toolkit.' ModuleName = 'NSP.FortiClient' MinimumVersion = '0.1.0' EntryFunction = 'Start-NSPFortiClientToolkit' ShimFunction = 'New-NSPFortiClientShim' RequiresAdmin = $true Detect = { [bool](Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like 'FortiClient*' }) } DetectHint = 'FortiClient installed' SecretFields = @() Legacy = [pscustomobject]@{ StagingFolder = $null ExtractFolder = $null AnswersFile = $null ShimNames = @() ShimAnswersVar = $null FixedPaths = @('C:\Admin\FCTToolkit\Staging') } } ) function Get-NSPToolDefinition { param([Parameter(Mandatory)][string]$Tool) $def = $script:NSPToolDefinitions | Where-Object { $_.Name -eq $Tool } if (-not $def) { throw "Unknown tool '$Tool'. Known tools: $(($script:NSPToolDefinitions | ForEach-Object Name) -join ', ')." } return $def } |