MMM
21:38 15-11-2010 Задача автоматизации
[изображение]
Вот как бы написать такой скрипт или команду, чтобы одним кликом/ярлыком сменить пользователя в Win'7?
Задача: надо чтобы при загрузке компа в Win'7 автоматом загружался один профиль, а потом автоматом не прекращая первого сеанса загружался второй.
Автоматом войти в первый - не проблема даже для чайников. Автоматическая блокировка компа после полной загрузки профиля - тоже решение есть. А вот выбрать другой профиль автоматом и войти в него из состояния блокировки ну никак не реально, значит надо искать вариант переключения профиля минуя этап блокировки. Интересно, это реально?
Комментарии:
ZaRRaZZa
23:51 15-11-2010
давай рассуждать логически. во всех воркстейшн виндовс осях есть ограничение на количество активных сеансов. т.е. одновременно активных два сеанса быть не могут. т.е. обязательна цепочка блокировка первого сеанса - активация второго.
MMM
01:35 16-11-2010
Это понятно, мне не надо 2 активных, мне надо один фоном (первый загруженный и заблокированный), а второй загруженный сеанс - активный. То есть как будто бы я сделал следующие действия ручками:
1. Включил комп.
2. Вошел в систему под первой учетной записью (Пользователь 1).
3. Кликнул "Сменить пользователя" (не выходя из системы Пользователем 1, разумеется).
4. Вошел в систему под второй учетной записью (Пользователь 2).
Вот это хотелось бы сделать все автоматом при загрузке компа. Пока у меня вместо п.п. 3 и 4 получается только заблокировать комп (то есть почти до смены пользователя дошел, но это тупик).
ZaRRaZZa
10:22 16-11-2010
а если попробовать после авторизации первого сразу вторую сессию запустить, тут по идее винда должна сама залочить первую учетку.
MMM
10:46 16-11-2010
ZaRRaZZa, да, так и хотелось бы, но вчера не было мысли, как это сделать. Сейчас идея есть - надо будет попробовать "через задницу", то есть что-нибудь типа "runas winlogon"...
Alexvn
14:08 16-11-2010
ты лучше расскажи, что тебе на самом деле сделать надо
наверняка для твоей задачи есть нормальное решение, а не через задницу с двумя логинами
ZaRRaZZa
14:43 16-11-2010
я так понял что 3м хочет от себя что то запустить в фоне но при этом чтобы гуи грузился на другого пользователя.
я правильно мыслю понял?
тогда вопрос.
а нет возможности все это службой организовать или там еще через какую консольную, а не гуевую прогу?
MMM
19:13 16-11-2010
Alexvn, ZaRRaZZa, задача следующая:
  1. Начальные условия: у компа 2 основных назначения - домашний сервер + HTPC. То есть на нем даже после несанкционированной перезагрузки должен крутиться некий набор программ, которые заряжены в автозагрузку, но при этом всегда должна быть возможность любому домашнему ламеру взять пульт дистанционного управления и включить любимый мультик (вместо монитора - большой телевизор, клава с мышью - не для домашних ламеров).
  2. Мой профиль с правами админа настроен на автозагрузку нужного софта, второй профиль (с ограниченными правами) настроен на автозагрузку программной оболочки (визуального интерфейса) HTPC, управляемого с пульта ДУ.
  3. Цель: обеспечить, чтобы при любой (в том числе несанкционированной) перезагрузке запускался и серверный софт от админа, и оболочка HTPC из профиля с ограниченными правами.
Варианты решения:Первый вариант красив, но пока не решен, второй - реализуем, но геморрой + у ламера доступ к серверному софту, а у админа нет готовности его профиля в любой момент времени (согласитесь, куда как удобнее переключить профиль и сделать то, что надо, чем каждый раз его загружать с нуля).

отредактировано: 16-11-2010 19:27 - MMM

Indrigis
19:53 16-11-2010
Вариант "Автоматически войти в профиль админа и оттуда запустить оболочку от имени и по поручению ограниченного профиля" не подходить?

Собственно, меня смущает декларируемая сложность работы с профилем администратора. Запускаться под профилем ограниченного пользователя, при необходимости доступа к серверной части перелогиниться в администратора, затем, не выходя администратором из системы, уйти обратно в ограниченного.

Автозапуск Нужного™ софта можно сделать через планировщик от имени администратора, ибо там есть опция "При запуске Windows", не требующая входа в систему вообще.
Indrigis
19:57 16-11-2010
Т.е.
1) Планировщик при загрузке ПК в фоне пускает всё, требующее автозапуска, под учёткой администратора.
2) Автоматически логинимся в ограниченного пользователя HKLM\Software\Micriosoft\Windows NT\Current Version\Winlogon\AutoAdminLogon + DefaultDomain + DefaultUsername + DefaultPassword
3) По необходимости первый раз перелогиниваемся в администратора (первая загрузка профиля - ожидание, один раз на перезагрузку системы).
4) Сделав своё чёрное дело, блокируем администратора и возвращаемся в ограниченного пользователя.
ZaRRaZZa
20:12 16-11-2010
MMM
тьху на тебя. а я то думал.
а чем тебe крон не так?
если uac отрубить то вообще полный шоколад.
MMM
21:17 16-11-2010
Indrigis-XIII, блин, что-то мы не допоняли друг друга, кажется.
Вариант "Автоматически войти в профиль админа и оттуда запустить оболочку от имени и по поручению ограниченного профиля" не подходить? - как раз то, что мне необходимо и достаточно, но как это сделать одной кнопкой? Конкретно кнопкой POWER или RESET на системном блоке?
А недопонял я следующее: перечисленные тобой пункты 1-2-3-4 - ты утверждаешь, что это все возможно сделать автоматически, да? Как? Или ты не учел, что мне требуется все это сделать автоматом?

ZaRRaZZa, а чем мне поможет крон для решения задачи? Только эмуляцией манипуляций мыши и топтанием клавиш? Я не очень понимаю, как он мне может помочь запустить второй сеанс от имени/логина второго профиля, если не эмуляцией моих действий с устройствами ввода.
Indrigis
21:35 16-11-2010
Из списка: 1-2 - автоматически. В итоге после включения (независимо от входа в ситсему) с правами администратора запущен весь backend и мы вошли в систему под ограниченным пользователем, под которым, скажем, через две минуты после входа (чтобы backend прогрузился) запускается оболочка. При этом загрузку нужных программ, как я уже написал, необходимо будет переместить из папки "Автозагрузка" главного меню администратора в планировщик.
3-4 - уже при необходимости, вручную.

Автоматически войти в профиль админа и оттуда запустить оболочку от имени и по поручению ограниченного профиля.
В ключе реестра HKLM\Software\Micriosoft\Windows NT\Current Version\Winlogon задаём параметры
AutoAdminLogon = 1
DefaultDomain = ThisPc
DefaultUsername = VasyaPupkin
DefaultPassword = god

В результате при включении мы сразу логинимся под Васей Пупкиным (к примеру - администратором).
Васе же Пупкину в папку автозагрузки или в планировщик, с условием "При входе в систему" ставится на запуск графическая оболочка, управляемая пультом. При этом в системе загружен профиль Васи Пупкина, а оболочка запущена с правами Коли Васечкина.
Indrigis
21:54 16-11-2010
На всякий случай: В Windows XP можно было программно вызвать полную смену контекста пользователя, через GINA. В Vista, 7 и далее уже не получится, так как механизм входа в систему изменился и Credential Providers этой функции не дают.

Поэтому придётся решать вопрос путём входа в один контекст и запуска нужного ПО в другом.
Nerv
22:41 16-11-2010
sudo
MMM
23:25 16-11-2010
Indrigis-XIII, спасибо за рассказ, в общих чертах все понятно. Но остается ощущение, что мне это не совсем подходит (не вписывается в красивый вариант, а повторяет результат примитивного). В связи с этим несколько уточняющих вопросов осталось:
  1. Правильно ли я понимаю, что при реализации тобой предложенного алгоритма запуска юзер Вася Пупкин с ограниченными правами из своего профиля кроме предназначенной непосредственно для него оболочки HTPC будет еще иметь фактически ничем не ограниченный доступ к запущенным с правами админа через backend (как ты это называешь) серверным программам/процессам?
  2. И если это так, то в чем разница с ранее описанным мной примитивным вариантом запуска серверных программ тупо из профиля Васи Пупкина, но от имени и с правами другого профиля (админского)?
У меня изначально задача не дать тому, кто юзает оболочку HTPC доступ к серверным процессам даже если он кроме пульта ДУ еще и до мыши с клавиатурой доберется, потому и пытаюсь реализовать красивый вариант с нормальным/правильным разграничением прав по профилям родными средствами Win, а не просто запуск всего, что надо от имени разных пользователей - последнее как раз совсем не сложно (примитивный вариант).
Nerv я на этом компе отказался от linux, но рассматривал и тестировал уже аналог sudo для windows - runas (в моем переводе по созвучию с оригиналом - "выполнить через жопу").
Indrigis
23:39 16-11-2010
1) Пользователь, под которым мы в _данный_ момент вошли в систему, имеет доступ ко всему своему окружению. При запуске новых процессов в контексте другого пользователя основной пользователь повышенного доступа к ним иметь не будет. Если мы входим под администратором, потом запускаем HTPC под пользователем, то рабочий стол и все настройки доступны, если пользователь туда сунется.
2) Во втором случае администратор имеет мгновенный доступ к своему профилю, как и заказано. Ценой того, что этот же мгновенный доступ имеет и пользователь.
Разница, собственно, в том, что после запуска процесса через runas /user:admin пользователь не может его закрыть через свой диспетчер задач.

Для того, чтобы пользователь HTPC не имел лишнего доступа куда не надо, следует:
* Через планировщик запускать весь необходимый backend в контексте администратора.
* Автоматически входить под пользователем и запускать под ним HTPC. Доступ к окружению у пультодержателя будет именно пользовательский.
* Конец первой серии - процессы администратора уже запущены, на экране HTPC, права у текущего пользователя - ограниченные.
*+ Когда необходим доступ администратора, переключаться на администратора вручную. Первый раз после загрузки это займёт некоторое время для инициализации окружения. В дальнейшем - быстро.
*+ После этого вручную же переключаться обратно на ограниченного пользователя.

Недостаток этого политически верного метода - задержка при первом переключении в учетную запись администратора.
MMM
00:06 17-11-2010
Indrigis-XIII, спасибо, кажется я разницу понял, поковыряюсь при случае в планировщике, посмотрю как это работает.
На первый взгляд твой алгоритм кажется вполне достаточным на случай непредвиденной перезагрузки компа, так что если ничего лучше не придумаю, на нем и потренируюсь и остановлюсь.
Еще раз спасибо