Смена паролей всем локальным пользователям 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С

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

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

1 стартмани

15.05.2024    233    1    Лев    1    

1

Перенос пользователей ИБ со значениями разделителей через файл

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

Обработка предназначена для переноса пользователей между разными базами 1С. Позволяет выгрузить выбранных (или всех) пользователей базы-источника со всеми настройками, включая разделение данных, в файл. И с помощью этой же обработки загрузить выгруженных пользователей из файла в базу-приёмник. Может быть полезна тем, кто хочет перенести пользователей между базами, у которых включено разделение данных.

1 стартмани

02.05.2024    347    1    METAL    2    

4

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

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

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

5 стартмани

17.04.2024    370    1    flappy27    0    

3

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

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

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

2 стартмани

25.03.2024    4480    7    dungeonkeeper    1    

13

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

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

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

25.03.2024    1722    bayselonarrend    3    

39

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

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

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

17.01.2024    3278    kamisov    19    

61

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

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

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

1 стартмани

12.12.2023    384    1    anuar_medeup    0    

0

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

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

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

21.11.2023    3413    NikitaIvanchenko    16    

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

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

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

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