Javascript-форум (https://javascript.ru/forum/)
-   Сайт Javascript.ru (https://javascript.ru/forum/site/)
-   -   Скрипт по добавлению списка баз данных при входе в систему! (https://javascript.ru/forum/site/3664-skript-po-dobavleniyu-spiska-baz-dannykh-pri-vkhode-v-sistemu.html)

Demidovstan 13.05.2009 12:15

Скрипт по добавлению списка баз данных при входе в систему!
 
Есть скритп который при входе системы должен запускаться и добавлть список баз 1С-ки в реестр!
Только вот что то он не срабатывает никак! Я в скриптах ничего не понимаю!
Помогите его запустить, пожалуйста!

Demidovstan 13.05.2009 12:17

// Скрипт для регистрации баз 1С 7.7
// (с)Zhurba

var IniFileName = "\\\\DEN\\Bases\\1c77bases.ini";
var RegFileName = "1c77bases.reg";

var str1C_Reg = "\\Software\\1C\\1Cv7\\7.7\\Titles";

var wsh = WScript.CreateObject("WScript.Shell");
var UserName = WScript.CreateObject("WScript.Network").UserName;
var fso = WScript.CreateObject("Scripting.FileSystemObject") ;
var RegFileName = wsh.ExpandEnvironmentStrings("%Temp%")+"\\"+RegFil eName;

//================================================== ===============
function echo(text) {return WScript.echo(text);}
function trim(S) {return S.replace(/^ +|[ \t\f\n\r\v]+$/g,"");}

//================================================== ===============
function getBases(ini)
{
//echo(ini);
posBases = ini.search(/\[Bases\]/);
if(posBases<0) return null;
posUsers = ini.search(/\[Users\]/);
if(posUsers<0) throw new Error("reg1с77bases.ERR: can't find USERS partition");
if(posUsers<posBases) throw new Error("reg1с77bases.ERR: USERS partition befor BASES");

var arrBaseRecs = ini.slice(posBases+7,posUsers).split(/[\f\n\r\v]/);
//echo(arrBaseRecs);
//ассоциативный массивчик для баз
var arrBases = WScript.CreateObject("Scripting.Dictionary");
if(arrBaseRecs!=null)
while(arrBaseRecs.length)
{
var strBaseRec = trim(arrBaseRecs.shift());
if(!strBaseRec.length) continue;
var arrBaseRec = strBaseRec.split(/=/);
if(arrBaseRec==null) continue;
if(arrBaseRec.length!=3) continue;
var base = trim(arrBaseRec[0]);
//echo("@"+base+"@");
if(arrBases.Exists(base)) arrBases.Remove(base);
arrBases.Add(base,trim(arrBaseRec[1])+"="+trim(arrBaseRec[2]));
}
return arrBases;
}

//================================================== ===============
function getUserBases(ini)
{
//Ищем раздел [Users]
var U_list = ini.match(/\[Users\](.|\s)*/g);
if(U_list==null) throw new Error("reg1с77bases.ERR: Can't find USERS partition");
if(U_list.length>1) throw new Error("reg1с77bases.ERR: too mach USERS partitions");
//echo(U_list[0]);
//Ищем все записи по юзеру UsersName
var arrUserRecs = U_list[0].match(RegExp(UserName+"(.*|\s*)","g"));
//echo(arrUserRecs.length+":\n"+arrUserRecs);
var arrUserBases = new Array();
if(arrUserRecs!=null)
while(arrUserRecs.length)
{
var strUserRec = trim(arrUserRecs.shift());
if(!strUserRec.length) continue;
var arrUserRec = strUserRec.split(/=/);
if(arrUserRec==null) continue;
if(arrUserRec.length==2) arrUserBases.push(trim(arrUserRec[1]));
else if(arrUserRec.length==3) arrUserBases.push(trim(arrUserRec[1])+"="+trim(arrUserRec[2]));
}
return arrUserBases;
}

//================================================== ===============
function main()
{
//Заливаем все из файла (списки баз для юзеров)
if(!fso.FileExists(IniFileName)) throw new Error("reg1с77bases.ERR: ini-file with StartList not found");
var inif = fso.OpenTextFile(IniFileName,1);
var ini = inif.Readall();
inif.Close();

//Читаем общий список баз из раздела [Bases]
var Bases = getBases(ini);
//echo((new VBArray(Bases.Keys())).toArray());

//Читаем список баз для юзера UserName из раздела [Users]
var UserBases = getUserBases(ini);
//echo(UserBases);

//Обрабатываем полученный список, добавляем базы в реестр
if(UserBases.length)
{
//создаем reg-файл
var rf = fso.CreateTextFile(RegFileName);
rf.WriteLine("Windows Registry Editor Version 5.00\n\n[HKEY_CURRENT_USER"+str1C_Reg+"]");
while(UserBases.length)
{
var base = UserBases.shift();
if(base=="<CLEAR>") try {wsh.RegDelete("HKCU"+str1C_Reg+"\\");} catch (err){}
else
{
if(Bases.Exists(base)) rf.WriteLine(Bases.Item(base));
else rf.WriteLine(base);
}
}
rf.Close();
wsh.Exec("regedit /s "+RegFileName);

};
}

//================================================== ===============
//main();
try {main();}
catch (err) {WScript.echo(err.message);}

Demidovstan 13.05.2009 12:27

А вот инишник которому обращается этот скрипт и от куда берется список баз

[Bases]
ЗП2009 = "\\\\Den\\Bases\\Тюмень_ЗП_2009\\"="Тюм ень_ЗП_2009"

[Users]
//Зарплата
//Администратор
Администратор = ЗП2009
Администратор = "\\\\Den\\Bases\\Тюмень_ЗП_2009_2\\"="Тю мень_ЗП_2009_2"

AzriMan 13.05.2009 16:36

не по теме. в прямом и переносном смысле. не та ветка форума и как-бы вообще не тот форум.


Часовой пояс GMT +3, время: 23:36.