The problem is not your code, but the execution process. Complete system variables are assigned to the process that is running. therefore, your child process also had the same set of variables.
Your sample code works well. It adds a variable to the SYSTEM environment.
, , .
.
var oShell = WScript.CreateObject("WScript.Shell");
var oSysEnv = oShell.Environment("SYSTEM");
oSysEnv("TEST1") = "TEST_VALUE";
var oSysEnv = oShell.Environment("PROCESS");
oSysEnv("TEST1") = "TEST_VALUE";
oExec = oShell.Run("envtest.bat", 1, true);
.
. , "SET".
.