Last active
April 18, 2022 11:31
-
-
Save a-sitnikov/85a870b2375fd253e7657e8ba45f5552 to your computer and use it in GitHub Desktop.
Автоматическое обновление базы 1С
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd /D "%~dp0" | |
cscript.exe erp.js |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
var lib = new Object; | |
eval(fso.OpenTextFile("update-db-1c.js", 1).ReadAll()); | |
//log(lib.v8cexe); | |
v8cexe = "C:/1CData/8.3.9.2170_x64/bin/1cv8c.exe"; | |
v8exe = "C:/1CData/8.3.9.2170_x64/bin/1cv8.exe"; | |
server = "gr-rphost-01"; | |
sqlServer = "gr-sql"; | |
db = "PLPK_K3_ERP"; | |
cf = "C:/1CData/release/1Cv8_2017-05-26.cf"; | |
logFile = "update.log"; | |
unlockCode = "123321"; | |
backupFile = "E:\\temp\\" + db + ".bak"; | |
start1C = true; | |
dynamic = false; | |
run(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//run with cscript | |
//auth via NTLM | |
var v8cexe = "C:/1CData/8.3.9.2170_x64/bin/1cv8c.exe"; | |
var v8exe = "C:/1CData/8.3.9.2170_x64/bin/1cv8.exe"; | |
var server = "server1c"; | |
var sqlServer = "sql"; | |
var db = "DBName"; | |
var cf = "1Cv8.cf"; | |
var logFile = "update.log"; | |
var unlockCode = "123321"; | |
var backupFile = "E:\\temp\\" + db + ".bak"; | |
var start1C = true; | |
var start1Cparam = 'ВыполнитьОбновлениеИЗавершитьРаботу'; | |
var dynamic = false; | |
var WshShell = WScript.CreateObject('WScript.Shell'); | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
function GetDate() { | |
var date = new Date; | |
return date; | |
} | |
function log(str) { | |
WScript.Echo(str); | |
var logFile = fso.OpenTextFile("debug.log", 8, true); | |
logFile.WriteLine(str); | |
logFile.close(); | |
} | |
function Connect1C() { | |
var srvAddr = "tcp://" + server + ":1540"; | |
var mainPort = 1541; | |
var v8com = new ActiveXObject("V83.COMConnector"); | |
var serverAgent = v8com.ConnectAgent(srvAddr); | |
var clusters = serverAgent.GetClusters().toArray(); | |
var cluster = undefined; | |
for (var i in clusters) { | |
cluster = clusters[i]; | |
if (cluster.MainPort === mainPort) break; | |
} | |
if (!cluster) { | |
log("Cluster not found"); | |
return undefined; | |
} | |
serverAgent.Authenticate(cluster, "", ""); | |
var workingProcesses = serverAgent.GetWorkingProcesses(cluster).toArray(); | |
for (var i in workingProcesses) { | |
var workingProcess = workingProcesses[i]; | |
if (workingProcess.Running !== 1) continue; | |
var addr = "tcp://" + workingProcess.HostName + ":" + workingProcess.MainPort; | |
var cwp = v8com.ConnectWorkingProcess(addr); | |
cwp.AddAuthentication("", ""); | |
var infoBases = cwp.GetInfoBases().toArray(); | |
for (var j in infoBases) { | |
var infoBase = infoBases[j]; | |
if (infoBase.Name === db) { | |
return { | |
"serverAgent": serverAgent, | |
"cluster": cluster, | |
"cwp": cwp, | |
"infoBase": infoBase | |
}; | |
} | |
} | |
} | |
} | |
function ChangeIBParams1C(sessionsDenied) { | |
log("ChangeIBParams1C: " + GetDate()); | |
var params = Connect1C(); | |
if (params) { | |
var infoBase = params.infoBase; | |
var cwp = params.cwp; | |
if (!dynamic) { | |
infoBase.SessionsDenied = sessionsDenied; | |
} | |
infoBase.ScheduledJobsDenied = sessionsDenied; | |
infoBase.PermissionCode = unlockCode; | |
cwp.UpdateInfoBase(infoBase); | |
} | |
} | |
function KillUsers1C() { | |
log("KillUsers1C: " + GetDate()); | |
var params = Connect1C(); | |
if (params) { | |
var serverAgent = params.serverAgent; | |
var cluster = params.cluster; | |
var infoBase = params.infoBase; | |
var cwp = params.cwp; | |
ibDesc = cwp.CreateInfoBaseInfo(); | |
ibDesc.Name = infoBase.Name; | |
var connections = cwp.GetInfoBaseConnections(ibDesc).toArray(); | |
for (var i in connections) { | |
var connection = connections[i]; | |
log("kill: " + connection.ConnID); | |
cwp.Disconnect(connection); | |
} | |
var sessions = serverAgent.GetSessions(cluster).toArray(); | |
for (var i in sessions) { | |
var session = sessions[i]; | |
if (session.InfoBase.Name === infoBase.Name) { | |
log("kill: " + session.SessionID + ", " + session.UserName); | |
serverAgent.TerminateSession(cluster, session); | |
} | |
} | |
} | |
} | |
function BackupDB() { | |
log("BackupDB: " + GetDate()); | |
var queryText = | |
"BACKUP DATABASE " + db + | |
" TO DISK='" + backupFile + "'" + | |
" WITH" + | |
" FORMAT, COPY_ONLY, STATS"; | |
var cmdText = "sqlcmd -E -S " + sqlServer + " -Q " + '"' + queryText + '"'; | |
log(cmdText); | |
WshShell.Run(cmdText, 1, true); | |
} | |
function LoadCF() { | |
log("LoadCF: " + GetDate()); | |
var cmdText = '"' + v8exe + '"' + " DESIGNER /S" + server + "\\" + db + " /UC" + unlockCode + " /LoadCfg" + cf; | |
log(cmdText); | |
WshShell.Run(cmdText, 1, true); | |
} | |
function UpdateDB() { | |
log("UpdateDB: " + GetDate()); | |
var dynamicParam = ""; | |
if (dynamic) { | |
dynamicParam = "-Dynamic+ "; | |
} | |
var cmdText = '"' + v8exe + '"' + " DESIGNER /S" + server + "\\" + db + " /UC" + unlockCode + " /UpdateDBCfg -Server " + dynamicParam + "/Out" + logFile; | |
log(cmdText); | |
WshShell.Run(cmdText, 1, true); | |
} | |
function Start1CEnt() { | |
log("Start1C: " + GetDate()); | |
var cmdText = '"' + v8cexe + '"' + " ENTERPRISE /S" + server + "\\" + db + " /UC" + unlockCode + " /C" + start1Cparam; | |
log(cmdText); | |
WshShell.Run(cmdText, 1, false); | |
} | |
function run() { | |
log(db); | |
if (!fso.FileExists(cf)) { | |
log("File not found: " + cf); | |
return; | |
} | |
if (db === "PLPK_K3_ERP") { | |
BackupDB(); | |
} | |
LoadCF(); | |
ChangeIBParams1C(true); | |
if (!dynamic) { | |
KillUsers1C(); | |
} | |
// WScript.Sleep(1000); | |
UpdateDB(); | |
if (start1C) { | |
Start1CEnt(); | |
} | |
ChangeIBParams1C(false); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment