# EIM XErase Integration Setup Script # Run this on the XErase server to install the EIM relay integration. # Generated: 2026-06-15T10:43:36.017157 $EimUrl = "http://192.168.1.130:8083/api/xerase" $ScriptDir = "C:\XERAS_override\scripts" $IniPath = "C:\LCServer\config\xerase.ini" Write-Host "=== EIM XErase Integration Setup ===" -ForegroundColor Cyan # Step 1: Write the API script Write-Host "Writing EIM_Relay.api to $ScriptDir..." $scriptContent = @' ; EIM_Relay.api ; Sends XErase erasure data to EIM platform ; Uses XErase's built-in HTTP_POST scripting ; ; Place in: C:\XERAS_override\scripts\EIM_Relay.api ; Configure in LCServer: ERP Settings → select EIM_Relay.api ; Set HTTP_API_SERVER_ADDRESS in xerase.ini to EIM server ; e.g. http://10.10.103.76:8080/api/xerase ; ; ERP Stages: ; 0 = Boot (skip) ; 1 = Post-diagnostics system info ; 2 = Method override (skip) ; 3 = Pre-erasure drive data ; 4 = Post-erasure drive data ; 5 = Post-erasure system info ; ; Retry: 3 attempts per stage. XErase scripting has no SLEEP/LOOP, ; so retries are sequential with no delay. If all 3 fail, logs to ; UnprocessedErrors.txt for EIM-side reconciliation to pick up later. [DATABASE] TYPE = "MYSQL" [SCRIPT_LINES] VARIABLE CREATE url VARIABLE CREATE content_type VARIABLE CREATE response_code VARIABLE CREATE response_text VARIABLE CREATE Stage VARIABLE CREATE retry_count VARIABLE CREATE upload_ok VARIABLE CREATE error_line VARIABLE ASSIGN Stage,ERP_STAGE # Skip boot and method override stages IF Stage == '0' { EXECUTE EXIT_SCRIPT } IF Stage == '2' { EXECUTE EXIT_SCRIPT } VARIABLE ASSIGN content_type,'application/xml' VARIABLE ASSIGN retry_count,'0' VARIABLE ASSIGN upload_ok,'0' # Build URL from configured ERP_URL (set in xerase.ini HTTP_API_SERVER_ADDRESS) VARIABLE ASSIGN url,ERP_URL VARIABLE APPEND url,'/xml' # === Stage 4: Post-erasure drive data (most important) === IF Stage == '4' { # Attempt 1 HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } # Attempt 2 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Attempt 3 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Log failure if all 3 attempts failed IF upload_ok == '0' { VARIABLE ASSIGN error_line,ERP_STAGE VARIABLE APPEND error_line,'|4|' VARIABLE APPEND error_line,DRIVE_SN# VARIABLE APPEND error_line,'|' VARIABLE APPEND error_line,url WRITE ERRORLOG error_line TO UnprocessedErrors.txt } } # === Stage 3: Pre-erasure drive data === IF Stage == '3' { # Attempt 1 HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } # Attempt 2 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Attempt 3 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA DRIVE_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Log failure IF upload_ok == '0' { VARIABLE ASSIGN error_line,ERP_STAGE VARIABLE APPEND error_line,'|3|' VARIABLE APPEND error_line,DRIVE_SN# VARIABLE APPEND error_line,'|' VARIABLE APPEND error_line,url WRITE ERRORLOG error_line TO UnprocessedErrors.txt } } # === Stages 1 & 5: System info === IF Stage == '1' { # Attempt 1 HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } # Attempt 2 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Attempt 3 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Log failure IF upload_ok == '0' { VARIABLE ASSIGN error_line,ERP_STAGE VARIABLE APPEND error_line,'|1|' VARIABLE APPEND error_line,SYSTEM_ASSET_ID VARIABLE APPEND error_line,'|' VARIABLE APPEND error_line,url WRITE ERRORLOG error_line TO UnprocessedErrors.txt } } IF Stage == '5' { # Attempt 1 HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } # Attempt 2 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Attempt 3 IF upload_ok == '0' { HTTP_POST SET_URL url HTTP_POST SET_CONTENT_TYPE content_type HTTP_POST BODY_SET_DATA ERP_XML HTTP_POST EXECUTE HTTP_POST GET_VALUE 'ResponseCode',response_code HTTP_POST GET_VALUE 'ResponseText',response_text HTTP_POST FREE IF response_code == '200' { VARIABLE ASSIGN upload_ok,'1' } IF response_code == '201' { VARIABLE ASSIGN upload_ok,'1' } } # Log failure IF upload_ok == '0' { VARIABLE ASSIGN error_line,ERP_STAGE VARIABLE APPEND error_line,'|5|' VARIABLE APPEND error_line,SYSTEM_ASSET_ID VARIABLE APPEND error_line,'|' VARIABLE APPEND error_line,url WRITE ERRORLOG error_line TO UnprocessedErrors.txt } } EXECUTE EXIT_SCRIPT '@ Set-Content -Path "$ScriptDir\EIM_Relay.api" -Value $scriptContent -NoNewline Write-Host " Script written." -ForegroundColor Green # Step 2: Update xerase.ini Write-Host "Updating xerase.ini..." $ini = Get-Content $IniPath -Raw # Set HTTP_API_SERVER_ADDRESS if ($ini -match 'HTTP_API_SERVER_ADDRESS\s*=\s*"[^"]*"') { $ini = $ini -replace 'HTTP_API_SERVER_ADDRESS\s*=\s*"[^"]*"', "HTTP_API_SERVER_ADDRESS = `"$EimUrl`"" } else { $ini = $ini -replace '\[INTERFACE\]', "[INTERFACE]`nHTTP_API_SERVER_ADDRESS = `"$EimUrl`"" } # Enable script $ini = $ini -replace 'USE_SYSTEM_POST_DIAG_SCRIPT\s*=\s*0\s*', 'USE_SYSTEM_POST_DIAG_SCRIPT = 1 ' $ini = $ini -replace 'SYSTEM_POST_DIAG_SCRIPT\s*=\s*"[^"]*"', 'SYSTEM_POST_DIAG_SCRIPT = "C:\XERAS_override\scripts\EIM_Relay.api"' Set-Content -Path $IniPath -Value $ini -NoNewline Write-Host " Configuration updated." -ForegroundColor Green # Step 3: Verify connectivity Write-Host "Verifying connectivity to EIM..." try { $response = Invoke-RestMethod -Uri "$EimUrl/health" -Method GET -TimeoutSec 10 Write-Host " EIM health check: OK" -ForegroundColor Green } catch { Write-Host " EIM health check: FAILED - $($_.Exception.Message)" -ForegroundColor Red Write-Host " Make sure EIM is running and reachable from this server." -ForegroundColor Yellow } Write-Host "" Write-Host "=== Setup Complete ===" -ForegroundColor Cyan Write-Host "Restart LCServer for changes to take effect." -ForegroundColor Yellow