Сценарий выхода из системы для смены пользователя

StackOverflow https://stackoverflow.com/questions/462693

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

shutdown /?

Вот несколько идей, которые, вероятно, попадают в категорию "дешевых взломов":

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

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

Мне также приходит в голову задаться вопросом, возможно, у службы есть способ принудительно открыть "экран входа" для входа в систему от имени определенного пользователя.Возможно, используя какой-то метод, подобный тому, как Удаленный рабочий стол делает это удаленно...Если это возможно, то вы могли бы создать службу, которую вы устанавливаете перед выходом из системы UserA, которая запускала бы вход в систему UserB.

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top