Documentation: - Add ShopDB-API.md with full API reference (all GET/POST endpoints) - Add detailed docs for Update-ShopfloorPCs-Remote, Invoke-RemoteMaintenance, Update-PC-CompleteAsset - Add DATA_COLLECTION_PARITY.md comparing local vs remote data collection - Add HTML versions of all documentation with styled code blocks - Document software deployment mechanism and how to add new apps - Document deprecated scripts (Invoke-RemoteAssetCollection, Install-KioskApp) Script Updates: - Update deployment source paths to network share (tsgwp00525.wjs.geaerospace.net) - InstallDashboard: \\...\scripts\Dashboard\GEAerospaceDashboardSetup.exe - InstallLobbyDisplay: \\...\scripts\LobbyDisplay\GEAerospaceLobbyDisplaySetup.exe - UpdateEMxAuthToken: \\...\scripts\eMx\eMxInfo.txt - DeployUDCWebServerConfig: \\...\scripts\UDC\udc_webserver_settings.json - Update machine network detection to include 100.0.0.* for CMM cases - Rename PC Type #9 from "Part Marker" to "Inspection" Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
17 KiB
Data Collection Parity Reference
Comprehensive comparison of data fields collected by the remote and local PowerShell scripts, including collection methods and API mapping.
Table of Contents
- Overview
- Scripts Compared
- Quick Reference Tables
- Detailed Field Reference
- Collection Methods
- API Parameter Mapping
- Testing Parity
- Known Differences
Overview
Both the remote and local collection scripts are designed to collect the same data fields for shopfloor PCs. This document provides a comprehensive reference for what data is collected, how it's collected, and any differences between the two approaches.
Goal: Any field collected by one script should also be collected by the other (where technically feasible).
Scripts Compared
| Aspect | Remote Script | Local Script |
|---|---|---|
| Name | Update-ShopfloorPCs-Remote.ps1 | Update-PC-CompleteAsset.ps1 |
| Location | S:\dt\shopfloor\scripts\remote-execution\ |
S:\dt\shopfloor\scripts\complete-asset\ |
| Execution | From admin workstation via WinRM | Directly on target PC |
| Context | SYSTEM via WinRM | Local user or SYSTEM |
| Batch Support | Yes (many PCs) | No (one PC at a time) |
| WinRM Required | Yes | No |
Quick Reference Tables
Complete Field Parity Status
| Category | Field | Remote | Local | Parity |
|---|---|---|---|---|
| System | Hostname | ✓ | ✓ | ✓ |
| Serial Number | ✓ | ✓ | ✓ | |
| Service Tag | ✓ | ✓ | ✓ | |
| Manufacturer | ✓ | ✓ | ✓ | |
| Model | ✓ | ✓ | ✓ | |
| Total Physical Memory | ✓ | ✓ | ✓ | |
| Domain Role | ✓ | ✓ | ✓ | |
| OS Version | ✓ | ✓ | ✓ | |
| Last Boot Time | ✓ | ✓ | ✓ | |
| Current Time Zone | ✓ | ✓ | ✓ | |
| Logged In User | ✓ | ✓ | ✓ | |
| PC Type | ✓ | ✓ | ✓ | |
| Machine No | ✓ | ✓ | ✓ | |
| DNC | Site | ✓ | ✓ | ✓ |
| CNC | ✓ | ✓ | ✓ | |
| NcIF | ✓ | ✓ | ✓ | |
| Host Type | ✓ | ✓ | ✓ | |
| FTP Primary | ✓ | ✓ | ✓ | |
| FTP Secondary | ✓ | ✓ | ✓ | |
| GE Registry | 32-bit Present | ✓ | ✓ | ✓ |
| 64-bit Present | ✓ | ✓ | ✓ | |
| Dual Path Enabled | ✓ | ✓ | ✓ | |
| Path 1 Name | ✓ | ✓ | ✓ | |
| Path 2 Name | ✓ | ✓ | ✓ | |
| Network | Interface Name | ✓ | ✓ | ✓ |
| IP Address | ✓ | ✓ | ✓ | |
| Subnet Mask | ✓ | ✓ | ✓ | |
| Default Gateway | ✓ | ✓ | ✓ | |
| MAC Address | ✓ | ✓ | ✓ | |
| Is DHCP | ✓ | ✓ | ✓ | |
| Is Active | ✓ | ✓ | ✓ | |
| Is Machine Network | ✓ | ✓ | ✓ | |
| Is Primary | ✓ | ✓ | ✓ | |
| Apps | Serial Ports | ✓ | ✓ | ✓ |
| Has VNC | ✓ | ✓ | ✓ | |
| All Installed Apps | ✓ | ✓ | ✓ | |
| Tracked Applications | ✓ | ✓ | ✓ | |
| UDC Running | ✓ | ✓ | ✓ | |
| CLM Running | ✓ | ✓ | ✓ | |
| Printer | Default Printer FQDN | ✓ | ✓ | ✓ |
| Local Only | V-Drive Access | ✗ | ✓ | N/A |
| C:\Apps Folder | ✗ | ✓ | N/A |
Legend: ✓ = Collected, ✗ = Not collected, N/A = Not applicable
Detailed Field Reference
Basic System Information
Hostname
- Description: Computer name of the target PC
- Remote:
$env:COMPUTERNAMEinside Invoke-Command scriptblock - Local:
$env:COMPUTERNAME - API Parameter:
hostname - Example:
SHOPFLOOR-PC01
Serial Number
- Description: BIOS serial number (Dell service tag)
- Remote:
(Get-CimInstance -Class CIM_BIOSElement).SerialNumber - Local:
(Get-CimInstance -Class CIM_BIOSElement).SerialNumber - API Parameter:
serialNumber - Example:
ABC1234567
Service Tag
- Description: Dell service tag (same as serial for Dell systems)
- Remote: Same as SerialNumber
- Local: Same as SerialNumber
- API Parameter:
serviceTag - Example:
ABC1234567
Total Physical Memory
- Description: Total RAM in gigabytes
- Remote:
[Math]::Round($computerSystem.TotalPhysicalMemory / 1GB, 2) - Local:
[Math]::Round($computerSystem.TotalPhysicalMemory / 1GB, 2) - API Parameter:
totalPhysicalMemory - Example:
16.0
Domain Role
- Description: Domain membership type
- Remote:
$computerSystem.DomainRole - Local:
$computerSystem.DomainRole - API Parameter:
domainRole - Values:
- 0 = Standalone Workstation
- 1 = Member Workstation
- 2 = Standalone Server
- 3 = Member Server
- 4 = Backup Domain Controller
- 5 = Primary Domain Controller
Current Time Zone
- Description: System timezone setting
- Remote:
(Get-TimeZone).Id - Local:
(Get-TimeZone).Id - API Parameter:
currentTimeZone - Example:
Eastern Standard Time
PC Type
- Description: Classification based on installed software
- Remote: Detection function in scriptblock
- Local:
Get-PCTypefunction - API Parameter:
pcType - Values: Dashboard, Lobby Display, CMM, Wax Trace, Keyence, EAS1000, Genspect, Heat Treat, Inspection, Shopfloor, Engineer, Standard
DNC Configuration
DNC General Settings
- Description: Machine DNC settings from GE Aircraft Engines registry
- Remote: Read from
HKLM:\SOFTWARE\[WOW6432Node\]GE Aircraft Engines\DNC\General - Local: Read from same registry path via
Get-DNCConfig - API Parameter:
dncConfig(JSON object)
DNC Config Fields:
| Field | Registry Key | API Key |
|---|---|---|
| Site | Site | dncConfig.Site |
| CNC | Cnc | dncConfig.CNC |
| NcIF | NcIF | dncConfig.NcIF |
| Machine No | MachineNo | dncConfig.MachineNo |
| Host Type | HostType | dncConfig.HostType |
| FTP Primary | FtpHostPrimary | dncConfig.FtpHostPrimary |
| FTP Secondary | FtpHostSecondary | dncConfig.FtpHostSecondary |
GE Registry Information
Registry Presence
- Description: Whether GE Aircraft Engines registry exists
- 32-bit Path:
HKLM:\SOFTWARE\GE Aircraft Engines - 64-bit Path:
HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines - API Parameters:
dncGeRegistry32Bit(1 or 0)dncGeRegistry64Bit(1 or 0)
Dual Path Configuration
- Description: eFocas dual-path settings for redundant machine connections
- Registry Path:
...\DNC\eFocas - API Parameters:
dncDualPathEnabled(1, 0, or null)dncPath1Name(string)dncPath2Name(string)
Network Interfaces
Both scripts collect all active network interfaces with these fields:
| Field | Description | API Key |
|---|---|---|
| InterfaceName | Adapter name | interfaceName |
| IPAddress | IPv4 address | ipAddress |
| SubnetMask | CIDR prefix length | subnetMask |
| DefaultGateway | Gateway address | defaultGateway |
| MACAddress | Physical address | macAddress |
| IsDHCP | DHCP enabled | isDhcp |
| IsActive | Interface is up | isActive |
| IsMachineNetwork | 192.168.. or 100.0.0.* address | isMachineNetwork |
| IsPrimary | 10.134.. address | isPrimary |
Network Classification:
- IsPrimary = 1: IP matches
^10\.134\.(corporate network) - IsMachineNetwork = 1: IP matches
^192\.168\.or^100\.0\.0\.(machine network, includes CMM cases)
Application Detection
Serial Ports
- Description: List of COM ports for DNC communication
- Collection:
Get-CimInstance -ClassName Win32_SerialPort - API Parameter:
serialPorts(JSON array) - Example:
[ {"PortName": "COM1", "Description": "Communications Port"}, {"PortName": "COM3", "Description": "USB Serial Port"} ]
VNC Detection
- Description: Whether VNC Server is installed
- Collection Methods:
- Registry check for VNC Server/Connect/RealVNC in Uninstall keys
- Service check for
vncserver*services
- API Parameter:
hasVnc(1 or 0)
All Installed Applications
- Description: Complete list of installed software
- Collection Locations:
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*Registry::HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*
- API Parameters:
allInstalledApps(pipe-delimited string)allInstalledAppsCount(integer)
Tracked Applications
- Description: Applications matched against
applications.csv - API Parameter:
installedApplications(JSON array) - Example:
[ {"appid": 2, "appname": "UDC", "version": "2.1.0", "isactive": 1}, {"appid": 15, "appname": "Tanium", "version": "7.4.2", "isactive": 1} ]
Printer Information
Default Printer FQDN
- Description: Network printer port name (IP or FQDN)
- Collection:
Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Default=$true" - Filtering: Excludes local/virtual printers (USB, LPT, XPS, PDF, etc.)
- Processing: Strips trailing underscore and port suffix (e.g.,
10.80.92.53_2→10.80.92.53) - API Parameter:
defaultPrinterFQDN
Collection Methods
Remote Script Data Flow
Admin Workstation Target PC
│ │
│ Invoke-Command (WinRM) │
├───────────────────────────────→│
│ │ ┌─────────────────────┐
│ │ │ Collect data: │
│ │ │ - CIM instances │
│ │ │ - Registry │
│ │ │ - Processes │
│ │ │ - Network config │
│ │ └─────────────────────┘
│ │
│ Return $result hashtable │
│←───────────────────────────────┤
│ │
│ ┌──────────────────────────┐ │
│ │ Send-PCDataToApi │ │
│ │ POST to ShopDB API │ │
│ └──────────────────────────┘ │
│ │
│ HTTP POST to API │
├───────────────────────────────→│ ShopDB Server
Local Script Data Flow
Target PC
│
│ ┌────────────────────────────────┐
│ │ Collect-SystemInfo │
│ │ - CIM instances │
│ │ - Registry │
│ │ - Processes │
│ └────────────────────────────────┘
│
│ ┌────────────────────────────────┐
│ │ Get-ShopfloorConfigurations │
│ │ - Network interfaces │
│ │ - DNC config │
│ │ - GE Registry │
│ └────────────────────────────────┘
│
│ ┌────────────────────────────────┐
│ │ Send-CompleteDataToDashboard │
│ │ POST to ShopDB API │
│ └────────────────────────────────┘
│
│ HTTP POST to API
├───────────────────────────────────→ ShopDB Server
API Parameter Mapping
updateCompleteAsset Action
| Category | API Parameter | Remote Source | Local Source |
|---|---|---|---|
| Basic | hostname | $result.Hostname | $systemInfo.Hostname |
| serialNumber | $result.SerialNumber | $systemInfo.SerialNumber | |
| serviceTag | $result.ServiceTag | $systemInfo.ServiceTag | |
| manufacturer | $result.Manufacturer | $systemInfo.Manufacturer | |
| model | $result.Model | $systemInfo.Model | |
| pcType | $result.PCType | $systemInfo.PCType | |
| loggedInUser | $result.LoggedInUser | $systemInfo.LoggedInUser | |
| machineNo | $result.MachineNo | $systemInfo.MachineNo | |
| osVersion | $result.OSVersion | $systemInfo.OSVersion | |
| lastBootUpTime | $result.LastBootUpTime | $systemInfo.LastBootUpTime | |
| totalPhysicalMemory | $result.TotalPhysicalMemory | $systemInfo.TotalPhysicalMemory | |
| domainRole | $result.DomainRole | $systemInfo.DomainRole | |
| currentTimeZone | $result.CurrentTimeZone | $systemInfo.CurrentTimeZone | |
| VNC | hasVnc | $result.HasVnc | $systemInfo.HasVnc |
| Serial | serialPorts | $result.SerialPorts (JSON) | $systemInfo.SerialPorts (JSON) |
| Apps | allInstalledApps | $result.AllInstalledApps | $systemInfo.AllInstalledApps |
| allInstalledAppsCount | $result.AllInstalledAppsCount | $systemInfo.AllInstalledAppsCount | |
| Printer | defaultPrinterFQDN | $result.DefaultPrinterFQDN | Get-DefaultPrinterFQDN |
| Network | networkInterfaces | $result.NetworkInterfaces (JSON) | $shopfloorInfo.NetworkInterfaces (JSON) |
| Comm | commConfigs | $result.CommConfigs (JSON) | $shopfloorInfo.CommConfigs (JSON) |
| DNC | dncConfig | $result.DNCConfig (JSON) | $shopfloorInfo.DNCConfig (JSON) |
| dncGeRegistry32Bit | $result.GERegistryInfo.Registry32Bit | $shopfloorInfo.GERegistryInfo.Registry32Bit | |
| dncGeRegistry64Bit | $result.GERegistryInfo.Registry64Bit | $shopfloorInfo.GERegistryInfo.Registry64Bit | |
| dncDualPathEnabled | $result.GERegistryInfo.DualPathEnabled | $shopfloorInfo.GERegistryInfo.DualPathEnabled | |
| dncPath1Name | $result.GERegistryInfo.Path1Name | $shopfloorInfo.GERegistryInfo.Path1Name | |
| dncPath2Name | $result.GERegistryInfo.Path2Name | $shopfloorInfo.GERegistryInfo.Path2Name |
Testing Parity
Manual Parity Test
Run both scripts on the same PC and compare results:
Step 1: Run Local Script
# On target PC
.\Update-PC-CompleteAsset.ps1 -DashboardURL "http://dev-server/api.asp" > local-output.txt
Step 2: Run Remote Script
# From admin workstation
.\Update-ShopfloorPCs-Remote.ps1 -ComputerName "TARGET-PC" -ApiUrl "http://dev-server/api.asp" > remote-output.txt
Step 3: Compare Database Records
-- Check if both created/updated the same record
SELECT * FROM machines WHERE hostname = 'TARGET-PC' ORDER BY lastupdated DESC LIMIT 2;
-- Compare specific fields
SELECT hostname, serialnumber, pctype, totalphysicalmemory, domainrole
FROM machines WHERE hostname = 'TARGET-PC';
Automated Parity Check Script
# parity-test.ps1
param(
[Parameter(Mandatory)]
[string]$ComputerName,
[PSCredential]$Credential
)
# Run remote collection
$remoteData = .\Update-ShopfloorPCs-Remote.ps1 -ComputerName $ComputerName -Credential $Credential -WhatIf
# Fields to compare
$fields = @(
'Hostname', 'SerialNumber', 'ServiceTag', 'Manufacturer', 'Model',
'TotalPhysicalMemory', 'DomainRole', 'CurrentTimeZone', 'PCType',
'HasVnc', 'AllInstalledAppsCount'
)
# Output comparison
foreach ($field in $fields) {
Write-Host "$field : $($remoteData.$field)"
}
Known Differences
Local-Only Fields
These fields can only be collected by the local script:
| Field | Reason |
|---|---|
| V-Drive Access | Requires user's mapped network drives |
| C:\Apps Folder Access | Network permissions differ in WinRM context |
Context Differences
| Aspect | Remote | Local |
|---|---|---|
| User context | SYSTEM (via WinRM) | Logged-in user or SYSTEM |
| Network drives | Not accessible | Accessible |
| User registry (HKCU) | SYSTEM's HKCU | User's HKCU |
| Per-user apps | Via HKU enumeration | Via HKU + HKCU |
PC Type Detection
Both scripts use the same detection priority:
- Dashboard (GE Aerospace Dashboard)
- Lobby Display (GE Aerospace Lobby Display)
- CMM (PC-DMIS, goCMM, DODA)
- Wax Trace (FormTracePak, FormStatusMonitor)
- Keyence (VR-3000/5000/6000)
- EAS1000 (GageCal, NI Software)
- Genspect
- Heat Treat
- Inspection (machine number based)
- Shopfloor (default for domain shop PCs)
Additional local-only types:
- Engineer (requires V-Drive AND C:\Apps)
- Standard (default)