Сценарий выхода из системы для изменения пользователя - PullRequest
1 голос
/ 20 января 2009

Используя Windows 2003, я ищу способ создать «сценарий выхода из системы», который продолжит текущий выход из системы, а затем сразу же войдет в систему другого пользователя. Итак, «UserA» выходит из системы. Скрипт запускается для входа в систему «UserB».

Это часть обновления приложения для компьютера, на котором мы написали «оболочку»; похож на приложение киоска. Для обновления нам необходимо войти в систему как «Adminstrator», а затем, когда обновление завершится, выйти из системы «Administrator» и войти в систему как «sample_user». Мы хотели бы выполнить это без перезагрузки.

Обратите внимание, мне не нужен скрипт, который будет инициировать выход из системы (т. Е. "Завершение работы"). Я ищу скрипт , который будет запускаться после выхода пользователя из системы (устанавливается через групповые политики). Как и выше, сценарий должен регистрировать другого пользователя.

Спасибо.

Ответы [ 8 ]

6 голосов
/ 03 февраля 2009

Не думаю, что это возможно заявленным способом (скрипт при выходе из системы).

Вам необходимо настроить автоматический вход в систему в качестве указанной учетной записи, а затем выйти из системы (автоматически входя в нее для вас), а затем вам придется снова отключить эту функцию, поместив временный сценарий входа. ... обычно звучит грязно.

Фактическую настройку можно выполнить с помощью таких инструментов, как Microsofts Shared Computer Toolkit или аналогичных (не уверен, как работает «обычный» автоматический вход в реестр при ручном выходе из системы, но у меня был киоск XP, который автоматически входил в систему мгновенно, даже если вы вышли из системы вручную - вам пришлось переопределить его с помощью некоторой клавиши, такой как shift + logoff, чтобы иметь возможность вручную снова указать логин, так что каким-то образом это можно сделать).

"Самый простой" способ - заменить msgina.dll на кого-то другого, кто вас создал ...

Но зачем ты это делаешь? Просто используйте runas и запустите все, что вам нужно сделать от имени другого пользователя, не выходя из системы с консольного пользователя - это многопользовательская система? Рабочий стол просто пух ^^

( В любом случае для этого потребуется, чтобы учетные данные пользователя были доступны для вашего сценария, что делает его избыточным по мере того, как вы ставите под угрозу безопасность этой учетной записи - игнорируя цель иметь эту вторую учетную запись в первую очередь, для какой бы цели она ни была? )

4 голосов
/ 07 февраля 2009

Я бы попытался установить в реестре автолог с нужным пользователем, а затем просто выйти из системы с правами администратора. Это должно снова войти в систему вашего пользователя-киоска.

1 голос
/ 05 февраля 2009

Вы можете написать его с помощью VNC (есть много бесплатных версий, выбирайте сами). Настройте процесс VNC-сервера на компьютере для прослушивания на локальном хосте. Когда пользователь выходит из системы, ваш сценарий выхода из системы подключится к компьютеру с помощью VNC и отправит нажатия клавиш, необходимые для входа в систему следующего пользователя. VNC использует протокол RFB (удаленный кадровый буфер); Существуют библиотеки для большинства популярных языков, поэтому вы сможете быстро что-то заставить работать. Или есть связанные инструменты , которые могут помочь.

1 голос
/ 04 февраля 2009

Вот некоторые идеи, которые, вероятно, попадают в категорию «дешевого хака»:

Как насчет входа в систему на UserB, а затем с помощью runas /user:userA <cmd> для запуска первой части процесса установки?

Если это неприемлемо, я знаю, что есть способ заставить рабочие станции Windows (не входящие в домен) автоматически входить в определенную учетную запись пользователя после перезапуска. Возможно, если вы посмотрите, какие изменения в реестре происходят, и дублируете их, перезагрузка автоматически войдет в систему этого пользователя. (Конечно, на последнем этапе после входа в систему userB вам придется отменить эти изменения: -)

Мне также кажется, что у службы есть возможность заставить открытый «экран входа» войти в систему как определенный пользователь. Может быть, использовать какой-то метод, например, как удаленный рабочий стол делает это удаленно ... Если это возможно, то вы можете создать службу, которую вы устанавливаете перед выходом из системы userA, которая будет инициировать вход в систему userB.

1 голос
/ 20 января 2009

Не уверен, как войти в систему другого пользователя, когда текущий пользователь выходит из системы (не уверен, что Windows позволит вам ...)

Но вы можете использовать shutdown для выхода из системы:

shutdown /?
0 голосов
/ 10 февраля 2009

Вы можете подойти к этому с точки зрения создания утилиты удаленного управления (например, VNC и т. Д.). Здесь важно то, что если вы хотите получить доступ к части экрана входа в систему (то есть CTRL + ALT + DEL / имя пользователя / пароль), единственное замечание заключается в том, что служба Windows является единственным компонентом, который может получить к нему доступ, поэтому вы должен создать один.

Единственная проблема, которую я вижу с этой техникой в ​​целом, заключается в том, что даже если вы потратили много усилий, чтобы заставить ее работать (и это было бы довольно большое усилие), шансы на успешную работу со всем этим исходящие из сценария выхода из системы (то есть, когда работа завершается) низки даже из-за количества вещей, которые могут пойти не так при входе в систему с правами администратора.

Просто помните, что для всего, что вам нужно для работы в качестве администратора, в Windows есть более простые способы сделать это (например, «Запуск от имени», изменение прав пользователя для элементов, которые необходимо обновить, и т. Д.).

0 голосов
/ 08 февраля 2009

У меня нет сервера Windows 2003 или системы с настройкой «Групповой политики», чтобы проверить мою догадку, но вы можете взглянуть на SU («переключить пользователя») для Windows. Первоначально часть Resource Toolkit была расширена до новой SUperior SU . Публикуйте результаты / скрипт, если это работает.

0 голосов
/ 04 февраля 2009

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

Возможно, вы сможете создать некий «сервис», который будет работать с учетной записью сервиса (т. Е. Всегда активным), который автоматически сделает это переключение пользователя за вас.

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

Быстрый поиск приводит к следующему (вторая ссылка на форум, но в нем упоминается запуск Powershell как службы и отправка этой службе параметра, который будет путем к вашему сценарию переключения пользователей)

Как создать службу Windows с помощью Powershel

Сценарий Powershell в качестве службы Windows

...