REM ========================================================
REM   Template Version: 2.00
REM ========================================================

@ECHO OFF
chcp 437
SETLOCAL
SET APP_NAME=OS Version in ShareData - CPS
SET APP_LOG=C:\System.sav\LOGS\BB\%~n0.LOG
IF NOT EXIST C:\System.sav\LOGS\BB MD C:\System.sav\LOGS\BB

ECHO ############################################################# >> %APP_LOG%
ECHO  [%DATE%]                                                     >> %APP_LOG%
ECHO  [%TIME%] Beginning of the %~nx0                              >> %APP_LOG%
ECHO ############################################################# >> %APP_LOG%

REM ------------------- Script Entry ------------------------
ECHO [%TIME%] Start %APP_NAME% >>%APP_LOG%

IF exist C:\System.sav\Flags\RImage.flg        ECHO Recovery process [RImage.flg]......., skip. >> %APP_LOG% & goto RESULTPASSED
if exist c:\System.sav\Flags\RMSysRecovery.flg ECHO Recovery process [RMSysRecovery.flg], skip. >> %APP_LOG% & goto RESULTPASSED
IF exist C:\System.sav\Flags\UCRD.flg          ECHO Recovery process [UCRD.flg]........., skip. >> %APP_LOG% & goto RESULTPASSED
IF exist C:\System.sav\Flags\PBR.flg           ECHO Recovery process [PBR.flg],........., skip. >> %APP_LOG% & goto RESULTPASSED
IF exist C:\System.sav\Flags\PBRBareMetal.flg  ECHO Recovery process [PBRBareMetal.flg]., skip. >> %APP_LOG% & goto RESULTPASSED
IF exist C:\System.sav\Flags\SSRD.flg          ECHO Recovery process [SSRD.flg]........., skip. >> %APP_LOG% & goto RESULTPASSED
if exist C:\System.sav\Util\SSRD.flg           ECHO Recovery process [SSRD.flg]........., skip. >> %APP_LOG% & goto RESULTPASSED

set "pathSharedata=c:\System.sav\WDT\ShareData.INI"
if not exist %pathSharedata% echo Sharedata.ini not found >>%APP_LOG% & goto RESULTFAILED

set "CalebWMI=C:\system.sav\util\CalebWMI_%PROCESSOR_ARCHITECTURE%.exe"
if not exist "%CalebWMI%" echo %CalebWMI% lost >>%APP_LOG% & goto RESULTFAILED

if /I not "[%~1]"=="[OSVER]" goto OSVER_END
:OSVER
set OS_B=
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DisplayVersion >>%APP_LOG% 2>&1
ver >>%APP_LOG% 2>&1
for /F "tokens=1,3 delims= "   %%A IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DisplayVersion') do if /I "%%~A"=="DisplayVersion" set "OS_B=%%~B"
if not defined OS_B echo Failed to get DisplayVersion of OS >>%APP_LOG% & goto RESULTFAILED
echo OS_B="%OS_B%" >>%APP_LOG%


set OS_V_UBR=
for /F "tokens=1,3 delims= "   %%A IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR') do if /I "%%~A"=="UBR" set /A "OS_V_UBR=%%~B"
if not defined OS_V_UBR echo Failed to get UBR of OS >>%APP_LOG% & goto RESULTFAILED
echo OS_V_UBR="%OS_V_UBR%" >>%APP_LOG%

set OS_V_M=
rem for /F "tokens=1,2 delims==" %%A IN ('wmi___c path Win32_OperatingSystem get Version /value') do if /I "%%~A"=="Version" set "OS_V_M=%%~B"
for /F "tokens=1,2 delims==" %%A IN ('%CalebWMI% /WQL:"select Version from Win32_OperatingSystem"') do if /I "%%~A"=="Version" set "OS_V_M=%%~B"
if not defined OS_V_M echo Failed to get version of OS   >>%APP_LOG% & goto RESULTFAILED
echo OS_V_M="%OS_V_M%" >>%APP_LOG%

set "OS_V=%OS_V_M%.%OS_V_UBR%"
echo OS_V="%OS_V%" >>%APP_LOG%

echo Compare to ver >>%APP_LOG%
ver >>%APP_LOG% 2>&1
ver | find /I "%OS_V%" >>%APP_LOG% 2>&1
if errorlevel 1 echo The OS version may be incorrect, not align with ver.exe

set WinVer=
if exist C:\System.sav\Flags\W10.flg set "WinVer=Win10"
if exist C:\System.sav\Flags\W11.flg set "WinVer=Win11"
if not defined WinVer echo Failed to get version of Windows >>%APP_LOG% & goto RESULTFAILED

echo cscript.exe /nologo "%~dp0RWINI.VBS" write "%pathSharedata%" PC_GBU OSVer "%WinVer%_%OS_B%_%OS_V%" >>%APP_LOG% 2>&1
	 cscript.exe /nologo "%~dp0RWINI.VBS" write "%pathSharedata%" PC_GBU OSVer "%WinVer%_%OS_B%_%OS_V%" >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed to write into sharedata.ini, VBS result failure >>%APP_LOG% & goto RESULTFAILED

echo === Find string in sharedata.ini ============ >>%APP_LOG%
find /I "OSVer=%WinVer%_%OS_B%_%OS_V%" %pathSharedata% >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed to write into sharedata.ini, cannot find specific string >>%APP_LOG% & goto RESULTFAILED
echo ============================================= >>%APP_LOG%
:OSVER_END


if /I not "[%~1]"=="[PKID]" goto PKID_END
:PKID
set "pathOa3RptXml=c:\system.sav\wdt\OA3.Report.XML"
if not exist "%pathOa3RptXml%" echo There's no %pathOa3RptXml%, skip >>%APP_LOG% & goto PKID_END

set PKID=
echo cscript.exe /nologo "%~dp0XMLPARSER.VBS" /func=readnode /xml="%pathOa3RptXml%" /xpath="/Key/ProductKeyID" >>%APP_LOG% 2>&1
     cscript.exe /nologo "%~dp0XMLPARSER.VBS" /func=readnode /xml="%pathOa3RptXml%" /xpath="/Key/ProductKeyID" >>%APP_LOG% 2>&1
for /F "tokens=1,* delims==" %%A IN ('cscript.exe /nologo "%~dp0XMLPARSER.VBS" /func^=readnode /xml^="%pathOa3RptXml%" /xpath^="/Key/ProductKeyID"') do if /I "[%%~A]"=="[Value]" set "PKID=%%~B"
if not defined PKID echo Failed to find PKID in OA3.Report.XML >>%APP_LOG% & goto RESULTFAILED
echo PKID=[%PKID%] >>%APP_LOG%

echo cscript.exe /nologo "%~dp0RWINI.VBS" write "%pathSharedata%" PC_GBU OA3PKID "%PKID%" >>%APP_LOG% 2>&1
	 cscript.exe /nologo "%~dp0RWINI.VBS" write "%pathSharedata%" PC_GBU OA3PKID "%PKID%" >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed to write into sharedata.ini, VBS result failure >>%APP_LOG% & goto RESULTFAILED

echo === Find string in sharedata.ini ============ >>%APP_LOG%
find /I "OA3PKID=%PKID%" %pathSharedata% >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed to write into sharedata.ini, cannot find specific string >>%APP_LOG% & goto RESULTFAILED
echo ============================================= >>%APP_LOG%

:PKID_END





GOTO RESULTPASSED

:RESULTPASSED
ECHO [%TIME%] Result of the %APP_NAME% >> %APP_LOG%
ECHO RESULT=PASSED >> %APP_LOG%
GOTO END

:RESULTFAILED
ECHO [%TIME%] Result of the %APP_NAME% >> %APP_LOG%
ECHO RESULT=FAILED >> %APP_LOG%
ECHO ERRORLEVEL=%errorlevel% >> %APP_LOG%
GOTO END


:END
ENDLOCAL
@ECHO ON
