$ErrorActionPreference = 'Continue' $pyCandidates = @( 'C:\yutongda\apps\inquiry-agent\.venv\Scripts\python.exe', 'C:\Users\ytd_extdev_0903\incoming\inquiry-agent\.venv\Scripts\python.exe', 'C:\Python312\python.exe', 'C:\Python311\python.exe', 'C:\Python39\python.exe', 'python' ) $py = $null foreach ($c in $pyCandidates) { if ($c -eq 'python') { try { $v = & python -c "print(1)" 2>$null; if ($v -eq '1') { $py = 'python'; break } } catch {} } elseif (Test-Path $c) { $py = $c; break } } Write-Host ("python=" + $py) if (-not $py) { throw 'python missing' } # ensure deps & $py -c "import pymysql, openpyxl; print('deps_ok')" 2>$null if ($LASTEXITCODE -ne 0) { Write-Host 'pip install pymysql openpyxl' & $py -m pip install --quiet pymysql openpyxl } # place contract where repair script looks $contractSrc = 'C:\Users\ytd_extdev_0903\incoming\quote-template-mapping-v1.json' $contractDstDir = 'E:\wwwroot\inquiry-new\config\contracts' New-Item -ItemType Directory -Force -Path $contractDstDir | Out-Null if (Test-Path $contractSrc) { Copy-Item $contractSrc (Join-Path $contractDstDir 'quote-template-mapping-v1.json') -Force } & $py 'C:\Users\ytd_extdev_0903\incoming\_remote_repair_mapping_json.py' Write-Host ("repair_exit=" + $LASTEXITCODE)