Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Windows
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2014, 13:09   #1
Sauron_zombie
Новичок
Джуниор
 
Регистрация: 28.02.2014
Сообщений: 1
По умолчанию Скрипт на JScript для массового изменения учетных записей электронной почты в Outlook Express

Здравствуйте!

Есть скрипт (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" - непонятно.

Последний раз редактировалось Sauron_zombie; 28.02.2014 в 13:11.
Sauron_zombie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft Office Outlook : Отправка SMS с электронной почты (MegaFon, Beeline, MTS) kipish Софт 6 01.12.2011 10:26
Отправка электронной почты скрипт maksim1995 JavaScript, Ajax 6 11.02.2011 13:00
Экспорт учетных записей windows server 2003 ru3000 Безопасность, Шифрование 1 27.07.2009 16:30
Обработка электронной почты Sasha2009 Фриланс 2 14.03.2009 14:56