Смена паролей всем локальным пользователям Windows с помощью OneScript

27.08.20

Разработка - OneScript

Скрипт, который меняет пароли всем локальным пользователям Windows и сохраняет их в файле. Есть функция генерации пароля, можно задать длину пароля.

Дано:

Терминальный сервер Windows без домена. Пользователи зарегистрированы на самом сервере.

Задача: сменить всем пароли.

 

Решение

Длина пароля составляет 14 символов.

1) Создаем файл ChangeUserPass.os

 

 


// Запускать от имени администратора.

Функция НовыйПароль(КоличествоСимволов = 14)
		
	ГЦ = Новый ГенераторСлучайныхЧисел;
	НижняяГраницаЧисел = 1;
	ВерхняяГраницаЧисел = 9;
	
	
	СтрЧисла = "0123456789";
	СтрБуквыЗаглавные = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	СтрБуквыСтрочные = "abcdefghijkmnopqrstuvwxyz";
	СтрСпецСимволы = "!@#$%^&*()-";
	
	СтрНабор = "Aa!Bb@Cc#Dd$Ee%^Ff&Gg*Hh(Ii)Jj-Kk1L2Mm3Nn4Oo5Pp6Qq7Rr8Ss9Tt2Uu4Vv5Ww6Xx7Yy8Zz9";
	
	Пароль = "";
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрЧисла));
	СлучайныйСимвол = Сред(СтрЧисла, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрБуквыЗаглавные));
	СлучайныйСимвол = Сред(СтрБуквыЗаглавные, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрБуквыСтрочные));
	СлучайныйСимвол = Сред(СтрБуквыСтрочные, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрСпецСимволы));
	СлучайныйСимвол = Сред(СтрСпецСимволы, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрНабор));
	СлучайныйСимвол = Сред(СтрНабор, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрНабор));
	СлучайныйСимвол = Сред(СтрНабор, СлучЧисл, 1);
	Пароль = Пароль + СлучайныйСимвол;
	
	ДополнительноеКоличество = КоличествоСимволов - 6 - 1;
	Для ч = 0 По ДополнительноеКоличество Цикл
		СлучЧисл = ГЦ.СлучайноеЧисло(1, СтрДлина(СтрНабор));
		СлучайныйСимвол = Сред(СтрНабор, СлучЧисл, 1);
		Пароль = Пароль + СлучайныйСимвол;
	КонецЦикла;
	
	Возврат Пароль;
КонецФункции	

Функция ЗаменитьСимволы(т)
	Стр = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЫыЪъЭэЮюЯя";
	// В обратную сторону, т.е. в первую очередь замена существующих русских букв.
	т = СтрЗаменить(т, "п", "я");
	т = СтрЗаменить(т, "о", "ю");
	т = СтрЗаменить(т, "н", "э");
	т = СтрЗаменить(т, "к", "ъ");
	т = СтрЗаменить(т, "л", "ы");
	т = СтрЗаменить(т, "м", "ь");
	т = СтрЗаменить(т, "й", "щ");
	т = СтрЗаменить(т, "и", "ш");
	т = СтрЗаменить(т, "з", "ч");
	т = СтрЗаменить(т, "ж", "ц");
	т = СтрЗаменить(т, "е", "х");
	т = СтрЗаменить(т, "д", "ф");
	т = СтрЗаменить(т, "г", "у");
	т = СтрЗаменить(т, "в", "т");
	т = СтрЗаменить(т, "б", "с");
	т = СтрЗаменить(т, "а", "р");
	// Теперь остальные.
	т = СтрЗаменить(т, "Ђ", "А");
	т = СтрЗаменить(т, " ", "а");
	т = СтрЗаменить(т, "Ѓ", "Б");
	т = СтрЗаменить(т, "Ў", "б");
т = СтрЗаменить(т, "‚", "В");
т = СтрЗаменить(т, "ў", "в");
т = СтрЗаменить(т, "ѓ", "Г");
т = СтрЗаменить(т, "Ј", "г");
т = СтрЗаменить(т, "„", "Д");
т = СтрЗаменить(т, "¤", "д");
т = СтрЗаменить(т, "…", "Е");
т = СтрЗаменить(т, "Ґ", "е");
//т = СтрЗаменить(т, "р", "Ё"); // Почему-то Ё закодировалась как р. Есть пересечение замены а->р.
//т = СтрЗаменить(т, "с", "ё"); // Почему-то ё закодировалась как с. Есть пересечение замены б->с.
т = СтрЗаменить(т, "†", "Ж");
т = СтрЗаменить(т, "¦", "ж");
т = СтрЗаменить(т, "‡", "З");
т = СтрЗаменить(т, "§", "з");
т = СтрЗаменить(т, "€", "И");
т = СтрЗаменить(т, "Ё", "и");
т = СтрЗаменить(т, "‰", "Й");
т = СтрЗаменить(т, "©", "й");
т = СтрЗаменить(т, "Љ", "К");
т = СтрЗаменить(т, "Є", "к");
т = СтрЗаменить(т, "‹", "Л");
т = СтрЗаменить(т, "«", "л");
т = СтрЗаменить(т, "Њ", "М");
т = СтрЗаменить(т, "¬", "м");
т = СтрЗаменить(т, "Ќ", "Н");
т = СтрЗаменить(т, "­", "н");
т = СтрЗаменить(т, "Ћ", "О");
т = СтрЗаменить(т, "®", "о");
т = СтрЗаменить(т, "Џ", "П");
т = СтрЗаменить(т, "Ї", "п");
т = СтрЗаменить(т, "ђ", "Р");
//т = СтрЗаменить(т, "а", "р"); // Почему-то р закодировалась как а.
т = СтрЗаменить(т, "‘", "С");
//т = СтрЗаменить(т, "б", "с"); // Почему-то с закодировалась как б.
т = СтрЗаменить(т, "’", "Т");
//т = СтрЗаменить(т, "в", "т"); // Почему-то т закодировалась как в.
т = СтрЗаменить(т, "“", "У");
//т = СтрЗаменить(т, "г", "у"); // Почему-то у закодировалась как г.
т = СтрЗаменить(т, "”", "Ф");
//т = СтрЗаменить(т, "д", "ф"); // Почему-то ф закодировалась как д.
т = СтрЗаменить(т, "•", "Х");
//т = СтрЗаменить(т, "е", "х"); // Почему-то х закодировалась как е.
т = СтрЗаменить(т, "–", "Ц");
//т = СтрЗаменить(т, "ж", "ц"); // Почему-то ц закодировалась как ж.
т = СтрЗаменить(т, "—", "Ч");
//т = СтрЗаменить(т, "з", "ч"); // Почему-то ч закодировалась как з.
т = СтрЗаменить(т, "", "Ш");
//т = СтрЗаменить(т, "и", "ш"); // Почему-то ш закодировалась как и.
т = СтрЗаменить(т, "™", "Щ");
//т = СтрЗаменить(т, "й", "щ"); // Почему-то щ закодировалась как Й.
т = СтрЗаменить(т, "њ", "Ь");
//т = СтрЗаменить(т, "м", "ь"); // Почему-то ь закодировалась как м.
т = СтрЗаменить(т, "›", "Ы");
//т = СтрЗаменить(т, "л", "ы"); // Почему-то ы закодировалась как л.
т = СтрЗаменить(т, "љ", "Ъ");
//т = СтрЗаменить(т, "к", "ъ"); // Почему-то ъ закодировалась как к.
т = СтрЗаменить(т, "ќ", "Э");
//т = СтрЗаменить(т, "н", "э"); // Почему-то э закодировалась как н.
т = СтрЗаменить(т, "ћ", "Ю");
//т = СтрЗаменить(т, "о", "ю"); // Почему-то ю закодировалась как о.
т = СтрЗаменить(т, "џ", "Я");
//т = СтрЗаменить(т, "п", "я"); // Почему-то я закодировалась как п.
Возврат т;
КонецФункции

Попытка
	КоличествоСимволов = 14;
	ТекДата = ТекущаяДата();
	сТекДата = Строка(ТекДата);
	сТекДата = СтрЗаменить(сТекДата, Символы.НПП, "");
	сТекДата = СтрЗаменить(сТекДата, ":", ".");
	сТекДата = СтрЗаменить(сТекДата, " ", "_");
	чДень = День(ТекДата);
	чГод = Год(ТекДата);
	чМес = Месяц(ТекДата);
	сГод = СтрЗаменить(Строка(чГод), Символы.НПП, "");
	сМес = ?(чМес > 9, Строка(чМес), "0"+Строка(чМес));
	сДень = ?(чДень > 9, Строка(чДень), "0"+Строка(чДень));
	КаталогЛогов = "C:\Temp\";
	ИмяЛога = КаталогЛогов + "LogUserPass_" + сТекДата + ".txt";
	ЛогУд = Новый ЗаписьТекста(ИмяЛога, КодировкаТекста.UTF8);
	ИмяФСписПольз = КаталогЛогов + "Users_" + сТекДата + ".txt";
	ИмяФСписПольз = КаталогЛогов + "Users.txt"; 
	тСообщ = "ИмяФСписПольз=" + ИмяФСписПольз;
	ЛогУд.ЗаписатьСтроку(тСообщ);
	Сообщить(ИмяФСписПольз);
	//кмдСписПольз = "CMD.exe /C chcp 65001 & net user>"+ИмяФСписПольз;
	кмдСписПольз = "CMD.exe /C net user>"+ИмяФСписПольз;
	
	тСообщ = "кмдСписПольз=" + кмдСписПольз;
	Сообщить(кмдСписПольз);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	
	ШаблонСменыПароля = "CMD.exe /C net user [user] [pass]";
	
	КодВозврата = 0;
	ЗапуститьПриложение(кмдСписПольз, КаталогЛогов, Истина, КодВозврата);
	тСообщ = "КодВозврата=" + Строка(КодВозврата);
	Сообщить(тСообщ);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	
	Ф = Новый Файл(ИмяФСписПольз);
	Если НЕ Ф.Существует() Тогда
		тСообщ = "Отсутствует файл: " + ИмяФСписПольз;
		Сообщить(тСообщ);
		ЛогУд.ЗаписатьСтроку(тСообщ);
		ЗавершитьРаботу(0);
		ЛогУд.Закрыть();
	КонецЕсли;	

	//ЧТ = Новый ЧтениеТекста(ИмяФСписПольз, "windows-1251");
	ЧТ = Новый ЧтениеТекста(ИмяФСписПольз, "cp866");
	ВесьТекст = ЧТ.Прочитать();
	ЧТ.Закрыть();
	Сообщить(ВесьТекст);
	МасПС = СтрРазделить(ВесьТекст, Символы.ПС);
	КолМасПС = МасПС.Количество();
	Сообщить("КолМасПС=" + Строка(КолМасПС));
	МассивЛогинов = Новый Массив;
		
	Для Каждого ТекСтр ИЗ МасПС Цикл
		Если ПустаяСтрока(ТекСтр) Тогда Продолжить; КонецЕсли;
		Если Найти(ТекСтр, "--") > 0 Тогда Продолжить; КонецЕсли;
		Если Найти(ТекСтр, "\\") > 0 Тогда Продолжить; КонецЕсли;
		
		//ТекСтр = ЗаменитьСимволы(ТекСтр);
		
		Если Найти(ВРЕГ(ТекСтр), ВРЕГ("Команда")) > 0 И Найти(ВРЕГ(ТекСтр), ВРЕГ("выполнена")) > 0 Тогда Продолжить; КонецЕсли;
		Если ПустаяСтрока(ТекСтр) Тогда			
			Продолжить;
		КонецЕсли;
		
		ЛогУд.ЗаписатьСтроку(ТекСтр);
		
		Мас1 = СтрРазделить(ТекСтр, " ");
		КолСтрМас = Мас1.Количество();
		//Сообщить("КолСтрМас=" + Строка(КолСтрМас));
		МаксИнд = КолСтрМас - 1;
		
		Логин = "";
		// + Для обработки логинов, содержащих пробел, например "Иванов Иван". Ограничение: только один пробел между словами логина.
		Для ч = 0 ПО МаксИнд Цикл
			ТекЭл = Мас1[ч]; 
			//Сообщить("ТекЭл=" + ТекЭл);
			Если ПустаяСтрока(ТекЭл) Тогда
				Если НЕ ПустаяСтрока(Логин) Тогда
					МассивЛогинов.Добавить(Логин);
					Логин = "";
				КонецЕсли;
				Продолжить;
			КонецЕсли;
			Логин = ?(ПустаяСтрока(Логин), ТекЭл, Логин + " " + ТекЭл);
		КонецЦикла;
		// - Для обработки логинов, содержащих пробел, например "Иванов Иван". Ограничение: только один пробел между словами логина.		
	КонецЦикла;
	
	н = -1;
	Для Каждого Логин ИЗ МассивЛогинов Цикл
		н = н + 1;
		тСообщ = "МассивЛогинов[" + Строка(н) + "]=" + Логин;
		Сообщить(тСообщ);
		Если ВРЕГ(Логин) = ВРЕГ("admin1") Тогда
			Продолжить; // Если сменить пароли абсолютно всем и не знать паролей, то не получится войти. Поэтому один-два админа сменят сами свои пароли.
		КонецЕсли;
			
		кмд = СтрЗаменить(ШаблонСменыПароля, "[user]", """" + Логин + """");
			
		Пароль = НовыйПароль(КоличествоСимволов);
		кмд = СтрЗаменить(кмд, "[pass]", """" + Пароль + """");
		ЛогУд.ЗаписатьСтроку(кмд);
		ЗапуститьПриложение(кмд, КаталогЛогов, Истина, КодВозврата);
		тСообщ = "КодВозврата=" + Строка(КодВозврата);
		Сообщить(тСообщ);
		ЛогУд.ЗаписатьСтроку(тСообщ);
	КонецЦикла;
	ЛогУд.Закрыть();
Исключение
	тСообщ = Строка(ТекущаяДата()) + ": " + ОписаниеОшибки();
	Сообщить(тСообщ);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	ЛогУд.Закрыть();
КонецПопытки;

 

 

2) Создаем файл ChangeUserPass.bat

net user>C:\Temp\Users.txt
C:\utils\OneScript\bin\oscript.exe C:\utils\os\ChangeUserPass.os

3) Проверяем, что каталоги для создания файлов совпадают; в моем случае «C:\Temp\».

 

4) Запускаем ChangeUserPass.bat

Если не создались файлы, пробуем запустить от имени администратора.

 

5) В каталоге «C:\Temp\» должен быть файл «LogUserPass_*.txt» со списком логинов и паролей.

 

6) Все пароли сменены. Задача решена.

 

пароль смена пароля сменить Windows массовая все пароли скрипт автосмена автоматическая автоматически сбросить OneScript cmd bat безопасность паролей генерация генератор

См. также

Менеджер авторизации пользователей для 1С: ITILIUM

Информационная безопасность Роли и права Пароли Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Обработка "Менеджер авторизации пользователей" разработана для управления авторизацией пользователей в информационной базе на платформе 1С: ITILIUM. Этот инструмент предоставляет широкий набор функций, обеспечивающих безопасность доступа к данным и управление правами пользователей.

5 стартмани

17.04.2024    297    0    flappy27    0    

2

Подключение по RDP из 1С с автоматическим вводом пароля

Удаленное управление Пароли Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Как дать доступ сотруднику к удаленному рабочему столу (RDP), но при этом не давать пароль доступа?

2 стартмани

25.03.2024    4180    5    dungeonkeeper    1    

12

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1607    bayselonarrend    3    

38

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    3049    kamisov    17    

60

Сохранение учетных данных от Webkassa, Розница для Казахстана, ред 2.3

Пароли Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Казахстан Абонемент ($m)

Расширение позволяет сохранить данные о логине и пароле для сервиса Webkassa.kz и при каждом входе в РМК не вводить эти данные, что позволяет сократить время при входе в РМК для кассиров.

1 стартмани

12.12.2023    346    1    anuar_medeup    0    

0

Что такое ОСень? Или как лучшие практики из мира Java прижились в экосистеме OneScript

OneScript Бесплатно (free)

Думаете, на OneScript неудобно создавать сложные инфраструктурные приложения? Ошибаетесь. Благодаря фреймворку ОСень за последний год экосистема библиотек, упрощающих написание собственных приложений, существенно выросла. Расскажем о самых передовых технологиях OneScript. Спойлер: будет много рефлексии, мета-аннотаций, желудей, напильников и дубов с завязями.

21.11.2023    3297    NikitaIvanchenko    16    

46

Сохранение учетных данных для WebKassa для Казахстана

Пароли Платформа 1С v8.3 Конфигурации 1cv8 Казахстан Абонемент ($m)

Расширение для запоминания в базе логина пароля для авторизации на сервисе WebKassa.

1 стартмани

28.08.2023    635    2    BadMadJohn    0    

2

Массовая генерация и замена паролей пользователей

Пароли Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Абонемент ($m)

ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ! Запускаем обработку, смотрим на список пользователей и делаем свое дело, выделяем нужных или всех сразу и назначаем пароль. Особенно помогает, когда ну очень большая организация. ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ!

1 стартмани

28.08.2023    754    2    Maxiko    3    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Perfolenta 204 18.08.20 08:11 Сейчас в теме
ваша проблема в том, что вы хотите выполнить команду, которую может выполнить только интерпретатор cmd (имеется ввиду команда > ). Просто укажите его в командной строке и все заработает...
кмдСписПольз = "CMD.exe /C net user > "+ИмяФСписПольз;

ключ /С нужен для того, что бы после выполнения команды интерпретатор завершил работу...
2. info1i 223 20.08.20 13:01 Сейчас в теме
(1) Спасибо за подсказку!
Пока сервер недоступен; при появлении возможности, обязательно проверю и отредактирую скрипт в публикации.
Perfolenta; +1 Ответить
3. Perfolenta 204 20.08.20 23:51 Сейчас в теме
(2) кстати, если в именах пользователей есть русские буквы, то вы наверняка столкнетесь с проблемой кодировок... если хотите, проверьте и этот вариант...
5. info1i 223 31.08.20 16:16 Сейчас в теме
(3) Проверил на русских буквах - да, была проблема. Не придумал ничего умнее, как заменить закодированные символы обратно, в итоге получилось, но могут быть ошибки с буквами Ё, ё.
Perfolenta; +1 Ответить
6. Perfolenta 204 01.09.20 08:40 Сейчас в теме
(5) я пробовал ваш пример на своём языке Перфолента, поэтому не могу сказать будет ли так работать на OneScript, но у меня, что бы побороть кодировку, оказалось достаточно указать кодовую страницу cp866:

ЧТ = Новый ЧтениеТекста(ИмяФСписПольз,"cp866");

прикрепляю мой файл на Перфоленте...
Прикрепленные файлы:
СменаПаролей.pfl
7. info1i 223 02.09.20 09:54 Сейчас в теме
(6) Я просто не знал, как указать правильно кодировку; оказывается "cp866" - так прочиталось корректно.
Скрипт доработал с учетом кодировки. Но функцию замены символов на всякий случай оставил.
Perfolenta; +1 Ответить
4. info1i 223 31.08.20 16:11 Сейчас в теме
(1) Проверил; да, теперь с помощью CMD.exe команда выполняется. Спасибо! Скрипт поправил.
Perfolenta; +1 Ответить
Оставьте свое сообщение