Здравствуйте!
Есть скрипт (
http://shserg.ru/posts/script-outloo...atch-change-1/):
Код:
///////////////////////////////////////////////////////////////////////////
// JScript ChangeOEMailServers.js
// Замена текущих значений SMTP и IMAP серверов в учетных записях Outlook Express
//
// Пример вызова (не реализовано! параметры задаются в теле скрипта, а не передаются в командной строке!):
//cscript ChangeOEMailServers.js <old_SMTP_server> <new_SMTP_server> [<old_IMAP_server> <new_IMAP_server>]
//////////////////////////////////////////////////////////////////////////////////
var WshShell = WScript.CreateObject ("WScript.Shell");
//
var arrAccounts; //
var SubKeys;
var strMailAccounts = "HKCU\\Software\\Microsoft\\Internet Account Manager\\Accounts";
var strComputer = ".";
//
if ((WScript.Arguments.Count()!=4|WScript.Arguments.Count()!=6) & false) //false - заглушка
{
WScript.Echo ("Ошибка! Неправильное количество аргументов. \n"+
"Пример вызова: cscript ChangeOutlookSMTPIMAPservers.js <old_SMTP_server> <new_SMTP_server> <old_IMAP_server> <new_IMAP_server> [<old_LDAP_server> <new_LDAP_server>]");
}
else
{
//Заглушка (пока работаем без параметров командной строки)
var arrTypeOfServer = new Array ("SMTP Server", "POP3 Server", "POP3 User Name") ; //, "LDAP Server");
var arrOldServer = new Array();
var arrNewServer = new Array();
arrOldServer[0] = "smtp.admlr.loc"; // WScript.Arguments.Item(0); //старый SMTP-сервер
arrOldServer[1] = "pop3.admlr.loc"; // WScript.Arguments.Item(2); //старый POP3-сервер
arrOldServer[2] = "ahdgoqadw"; // WScript.Arguments.Item(2); //старый логин POP3 User Name
// arrOldServer[2] = "ldap"; // WScript.Arguments.Item(4); //старый LDAP-сервер
arrNewServer[0] = "mail.admlr.loc"; // WScript.Arguments.Item(1); //новый SMTP-сервер
arrNewServer[1] = "mail.admlr.loc"; // WScript.Arguments.Item(3); //новый POP3-сервер
arrNewServer[2] = "newuserlogin5"; // WScript.Arguments.Item(3); //новый логин SMTP Email Address
// arrNewServer[2] = "ldap"; // WScript.Arguments.Item(5); //новый LDAP-сервер
var strOldLDAPServer, strNewLDAPServer;
strOldLDAP=strNewLDAP="";
//Выполняем перечисление учетных записей электронной почты
arrAccounts = EnumSubKeys(strComputer, strMailAccounts);
for (var iAccNdx=0;iAccNdx<arrAccounts.length;iAccNdx++)
{
for (var iTOSNdx in arrTypeOfServer)
{
var strServer=""
//в каждой учетной записи пытаемся прочитать значение параметра, содержащееся в массиве arrTypeOfServer
try
{
strServer = WshShell.RegRead(strMailAccounts+"\\"+arrAccounts[iAccNdx]+"\\"+arrTypeOfServer[iTOSNdx]);
}
catch(e){}
if (strServer!="")
{
if (arrOldServer[iTOSNdx]==strServer)
{
WScript.Echo(strMailAccounts+"\\"+arrAccounts[iAccNdx]+"\\"+arrTypeOfServer[iTOSNdx]);
WScript.Echo("Found: " +arrTypeOfServer[iTOSNdx]+" = "+strServer+"...");
//Заменяем старое название сервера на новое
WshShell.RegWrite(strMailAccounts+"\\"+arrAccounts[iAccNdx]+"\\"+arrTypeOfServer[iTOSNdx], arrNewServer[iTOSNdx],"REG_SZ");
WScript.Echo("...and changed to: " +arrTypeOfServer[iTOSNdx]+" = "+arrNewServer[iTOSNdx]+"\n");
}
}
}
}//end for
}
//------------------------------------------------------------------------------
//Эта функция выполняет перечисление подключей (подразделов) реестра
//(для заданного компьютера и заданного ключа (раздела) реестра)
//Приходится использовать WMI, т.к. WSH не имеет средств для выполнения данной задачи
function EnumSubKeys (strComputer,RegKey)
{
var RootKey = new Object()
RootKey["HKCR"] = RootKey["HKEY_CLASSES_ROOT"] = 0x80000000;
RootKey["HKCU"] = RootKey["HKEY_CURRENT_USER"] = 0x80000001;
RootKey["HKLM"] = RootKey["HKEY_LOCAL_MACHINE"] = 0x80000002;
RootKey["HKUS"] = RootKey["HKEY_USERS"] = 0x80000003;
RootKey["HKCC"] = RootKey["HKEY_CURRENT_CONFIG"] = 0x80000005;
var RootVal = RootKey[RegKey.substr(0, RegKey.indexOf("\\"))]
if (RootVal != undefined)
{
var oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + strComputer + "\\root\\default:StdRegProv");
var method = oReg.Methods_.Item("EnumKey");
var inParams = method.InParameters.SpawnInstance_();
inParams.hDefKey = RootVal;
inParams.sSubKeyName = RegKey.substr(RegKey.indexOf("\\") + 1);
var outParams = oReg.ExecMethod_(method.Name, inParams);
return outParams.sNames.toArray();
}
}
Нужен для массового изменения учетных записей электронной почты в Outlook Express. Т.е. задача - на всех ПК во всех доменных учётных записях найти все учётные записи Outlook Express и заменить: SMTP Server, POP3 Server, POP3 User Name.
Если для замены серверов всё работает и понятно, т.к. используются явные "ручные" записи адресов, то как прочитать "POP3 User Name" и заменить его на часть адреса до @ параметра "SMTP Email Address" - непонятно.