Files
powershell-scripts/docs/FUNCTION_REFERENCE.md
cproudlock 96cb1dd946 Remove all emojis from markdown documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 11:03:45 -05:00

13 KiB

Function Reference Documentation

Update-PC-CompleteAsset.ps1

Core Functions

Get-DashboardURL

Purpose: Intelligent dashboard API URL discovery and validation
Parameters:

  • $ProvidedURL (string, optional) - User-specified URL

Logic Flow:

  1. Check command-line parameter
  2. Check environment variable ASSET_DASHBOARD_URL
  3. Check configuration file dashboard-config.json
  4. Auto-discovery probe of candidate URLs
  5. Fallback to default production URL

Returns: [string] - Validated dashboard API URL

function Get-DashboardURL {
    param([string]$ProvidedURL)
    
    # Priority-based URL resolution
    if (-not [string]::IsNullOrEmpty($ProvidedURL)) {
        return $ProvidedURL
    }
    
    # Auto-discovery with connection testing
    foreach ($url in $candidates) {
        $testResponse = Invoke-RestMethod -Uri "$url?action=getDashboardData" -Method Get -TimeoutSec 5
        if ($testResponse.success) {
            return $url
        }
    }
}

Test-ProxyConnection / Test-DashboardConnection

Purpose: Network connectivity validation for external services
Parameters:

  • $ProxyURL / $DashboardURL (string) - Target URL to test

Returns: [bool] - Connection success status

Features:

  • Configurable timeout values
  • Detailed error reporting
  • Service availability verification

Test-AppsFolder / Test-VDriveAccess / Test-WindowsLTSC

Purpose: PC type classification helper functions
Returns: [bool] - Feature presence status

Classification Logic:

function Get-PCType {
    if (Test-AppsFolder -and Test-VDriveAccess) {
        return "Engineer"    # Development workstations
    }
    elseif (Test-WindowsLTSC) {
        return "Shopfloor"   # Manufacturing systems  
    }
    else {
        return "Standard"    # Corporate systems
    }
}

Get-GEMachineNumber

Purpose: Extract GE machine numbers from hostname patterns
Parameters:

  • $Hostname (string) - Computer hostname

Pattern Matching:

  • H### patterns M### (H123 M123)
  • G### patterns M### (G456 M456)
  • Regex: [HG](\d{3})

Returns: [string] - Formatted machine number or $null


Collect-SystemInfo

Purpose: Comprehensive system information gathering
Returns: [hashtable] - Complete system profile

Data Sources:

  • WMI/CIM Classes: CIM_ComputerSystem, CIM_BIOSElement, CIM_OperatingSystem
  • Environment Variables: Hostname, user context
  • Registry Analysis: OS edition detection
  • File System: Apps folder and drive access testing

Output Structure:

$systemInfo = @{
    Hostname = $env:COMPUTERNAME
    Manufacturer = $computerSystem.Manufacturer        # Dell, HP, etc.
    Model = $computerSystem.Model                      # OptiPlex 7070
    SerialNumber = $bios.SerialNumber                  # Hardware serial
    ServiceTag = $bios.SerialNumber                    # Dell service tag
    LoggedInUser = $computerSystem.UserName.Split('\')[-1]
    OSVersion = $os.Caption                           # Windows 10 Enterprise LTSC
    TotalPhysicalMemory = [Math]::Round($computerSystem.TotalPhysicalMemory / 1GB, 2)
    DomainRole = $computerSystem.DomainRole           # Domain membership
    CurrentTimeZone = (Get-TimeZone).Id               # Timezone information
    LastBootUpTime = $os.LastBootUpTime               # Last boot timestamp
    PCType = Get-PCType -HasAppsFolder $hasApps -HasVDriveAccess $hasVDrive -IsLTSC $isLTSC
    MachineNo = Get-GEMachineNumber -Hostname $systemInfo.Hostname
}

Error Handling: Graceful degradation with "Unknown" fallbacks for failed WMI queries


Collect-ShopfloorInfo

Purpose: Manufacturing-specific configuration collection
Parameters:

  • $SystemInfo (hashtable) - Basic system information

Conditional Logic: Only executes for PCType = "Shopfloor"

Returns: [hashtable] - Manufacturing configuration data or $null

Calls: Get-ShopfloorConfigurations function from imported module


Get-WarrantyFromProxy

Purpose: Dell warranty information retrieval via proxy server
Parameters:

  • $ServiceTag (string) - Dell service tag
  • $ProxyURL (string) - Proxy server URL

API Integration:

$uri = "$ProxyURL" + "?vendor=dell&action=warranty&servicetag=$ServiceTag"
$response = Invoke-RestMethod -Uri $uri -Method Get -TimeoutSec 30

Response Processing: Extracts warranty end date, status, service level, and days remaining

Current Status: Disabled by default ($SkipWarranty = $true)


Send-CompleteDataToDashboard

Purpose: Centralized data transmission to dashboard API
Parameters:

  • $SystemInfo (hashtable) - System information
  • $ShopfloorInfo (hashtable) - Manufacturing configuration
  • $WarrantyData (hashtable) - Warranty information
  • $DashboardURL (string) - API endpoint URL

Payload Construction: Creates comprehensive HTTP POST payload with structured data

Manufacturing Data Handling Enhanced in v3.0:

# DualPath and Registry Architecture Data
$postData.dncDualPathEnabled = $geInfo.DualPathEnabled
$postData.dncPath1Name = $geInfo.Path1Name
$postData.dncPath2Name = $geInfo.Path2Name
$postData.dncGeRegistry32Bit = $geInfo.Registry32Bit
$postData.dncGeRegistry64Bit = $geInfo.Registry64Bit
$postData.dncGeRegistryNotes = $geInfo.RegistryNotes | ConvertTo-Json -Compress

Error Handling: Comprehensive HTTP exception handling with detailed error reporting


Get-ShopfloorConfig.ps1

Manufacturing Intelligence Functions

Get-NetworkInterfaceConfig

Purpose: Advanced network interface analysis with manufacturing intelligence
Returns: [array] - Network interface configuration objects

Multi-Method Approach:

  1. Primary: Get-NetAdapter / Get-NetIPConfiguration cmdlets
  2. Fallback: WMI Win32_NetworkAdapterConfiguration class

Manufacturing Intelligence:

# Machine network detection
$isMachineNetwork = $ip.IPAddress -match '^192\.168\.'

$interface = @{
    InterfaceName = $adapter.Name
    IPAddress = $ip.IPAddress
    SubnetMask = $ip.PrefixLength
    DefaultGateway = $gateway
    MACAddress = $adapter.MacAddress
    IsDHCP = if ($ipConfig.NetIPv4Interface.Dhcp -eq 'Enabled') { 1 } else { 0 }
    IsActive = 1
    IsMachineNetwork = if ($isMachineNetwork) { 1 } else { 0 }
}

Get-SerialPortConfig

Purpose: Serial communication port enumeration and configuration analysis
Returns: [array] - Serial port configuration objects

Registry Data Source: HKLM:\HARDWARE\DEVICEMAP\SERIALCOMM

Configuration Structure:

$config = @{
    PortName = $portName          # COM1, COM2, etc.
    DevicePath = $devicePath      # Hardware device path
    IsActive = 1                  # Availability status
    ConfigSource = "Registry"     # Data source identifier
}

Get-DNCConfig

Purpose: Direct Numerical Control configuration extraction from GE Aircraft Engines registry
Returns: [hashtable] - Complete DNC configuration or $null

Multi-Path Registry Analysis:

$paths = @(
    'HKLM:\SOFTWARE\GE Aircraft Engines\DNC\General',
    'HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC\General'
)

Configuration Sections Analyzed:

  • General: Site, CNC type, NcIF, Machine number, Debug settings
  • MX: FTP host configuration, account credentials
  • FMS: FMS host settings, socket configuration

Output Structure:

$dncConfig = @{
    Site = $general.Site                    # WestJefferson
    CNC = $general.Cnc                     # Fanuc 30
    NcIF = $general.NcIF                   # EFOCAS
    MachineNumber = $general.MachineNo     # 3109
    HostType = $general.HostType           # WILM
    Debug = $general.Debug                 # ON/OFF
    # ... additional configuration parameters
}

Get-GERegistryInfo New in v3.0

Purpose: Comprehensive GE Aircraft Engines registry architecture analysis with DualPath detection
Returns: [hashtable] - Complete registry architecture and DualPath configuration

Dual Registry Architecture Support:

$registryPaths = @{
    '32bit' = 'HKLM:\SOFTWARE\GE Aircraft Engines'
    '64bit' = 'HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines'
}

Smart Conflict Resolution:

# Priority system prevents data overwrites
if ($geInfo.DualPathEnabled -eq $null) {
    $geInfo.DualPathEnabled = $efocasValues.DualPath -eq 'YES'
    Write-Host "Setting DualPath from $pathType registry: $($geInfo.DualPathEnabled)"
} else {
    Write-Host "DualPath already set from other registry location, keeping existing value"
}

Comprehensive Data Collection:

  • Registry Presence: 32-bit and/or 64-bit detection
  • Sub-key Enumeration: Complete service inventory
  • DualPath Configuration: eFocas DualPath settings extraction
  • Path Configuration: Path1Name and Path2Name identification
  • Metadata Collection: Timestamps, registry paths, additional settings

Output Structure:

$geInfo = @{
    Registry32Bit = $false                    # Boolean: Found in 32-bit registry
    Registry64Bit = $true                     # Boolean: Found in 64-bit registry
    DualPathEnabled = $true                   # Boolean: DualPath enabled
    Path1Name = "Path1Primary"                # String: Primary path name
    Path2Name = "Path2Secondary"              # String: Secondary path name
    RegistryNotes = @{                        # Hashtable: Comprehensive metadata
        "64bit" = @{
            BasePath = "HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines"
            SubKeys = "DNC, Enhanced DNC, MarkZebra, PPDCS"
            Found = "2025-09-06 14:30:00"
        }
        "64bit-eFocas" = @{
            DualPath = "YES"
            Path1Name = "Path1Primary"
            Path2Name = "Path2Secondary"
            IpAddr = "192.168.1.1"
            SocketNo = "8192"
            Danobat = "NO"
            DataServer = "NO"
        }
    }
}

Get-ShopfloorConfigurations

Purpose: Master orchestration function for all manufacturing-specific data collection
Returns: [hashtable] - Complete manufacturing configuration profile

Orchestration Logic:

$configurations = @{
    NetworkInterfaces = Get-NetworkInterfaceConfig    # Network topology analysis
    CommConfigs = Get-SerialPortConfig               # Serial communication ports
    DNCConfig = Get-DNCConfig                        # Direct Numerical Control settings
    GERegistryInfo = Get-GERegistryInfo              # Registry architecture analysis
}

Summary Reporting:

Write-Host "Configuration Summary:" -ForegroundColor Green
Write-Host "  Network Interfaces: $($configurations.NetworkInterfaces.Count)"
Write-Host "  Comm Configs: $($configurations.CommConfigs.Count)"
Write-Host "  DNC Config: $(if ($configurations.DNCConfig) { 'Yes' } else { 'No' })"
Write-Host "  GE Registry (32-bit): $(if ($configurations.GERegistryInfo.Registry32Bit) { 'Yes' } else { 'No' })"
Write-Host "  GE Registry (64-bit): $(if ($configurations.GERegistryInfo.Registry64Bit) { 'Yes' } else { 'No' })"
Write-Host "  DualPath Enabled: $(if ($configurations.GERegistryInfo.DualPathEnabled -eq $null) { 'Not Found' } elseif ($configurations.GERegistryInfo.DualPathEnabled) { 'Yes' } else { 'No' })"

Error Handling Patterns

Standard Error Handling Template

try {
    # Primary operation
    $result = Get-SomeInformation
    Write-Host "[OK] Operation successful" -ForegroundColor Green
}
catch {
    Write-Host "[FAIL] Operation failed: $($_.Exception.Message)" -ForegroundColor Red
    # Graceful degradation or fallback
}

Registry Access Error Handling

try {
    $registryValue = Get-ItemProperty -Path $registryPath -ErrorAction SilentlyContinue
}
catch {
    Write-Host "Error reading registry: $_" -ForegroundColor Red
    $geInfo.RegistryNotes[$pathType] = @{
        Error = $_.Exception.Message
    }
}

Network Communication Error Handling

try {
    $response = Invoke-RestMethod -Uri $url -Method Post -Body $postData -TimeoutSec 30
}
catch [System.Net.WebException] {
    Write-Host "[FAIL] Network error: $($_.Exception.Message)" -ForegroundColor Red
    return $false
}
catch {
    Write-Host "[FAIL] Unexpected error: $($_.Exception.Message)" -ForegroundColor Red
    return $false
}

Function reference provides comprehensive understanding of all script capabilities, parameters, error handling, and integration patterns for enterprise manufacturing environments.