|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Удаленный запуск HTA-приложения от имени текущего пользователя |
|
VBS/WSH/JS - Удаленный запуск HTA-приложения от имени текущего пользователя
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать День добрый!
Имеем HTA-приложение (анкета) заполняющее несколько атрибутов в Active Directory для объекта пользователя, запустившего анкету. В AD на эти несколько аттрибутов розданы права на запись для "NT AUTHORITY\SELF" (т.е. каждый юзер может менять только собственные аттрибуты). Все отлично работает, если анкета запускается через logon-script (как и было задумано). Некоторые пользователи упорно игнорируют заполнение анкеты, не завершают сеанс месяцами, либо из-за сбоев в домене к ним не применяется групповая политика . Хочется форсировать запуск у самых упорных, т.е. как имея права администратора на рабочей станции, запустить программу от имени и в сеансе обычного пользователя. P.S. Сразу скажу что задача не столь тривиальная (psexec/runas/schtask - все хотят пароль учетной записи), как многим может показаться, т.к. пароль пользователя мне не известен и узнавать его нет смысла - пользователей более 300 душ. |
|
Отправлено: 09:30, 23-03-2010 |
Пользователь Сообщения: 72
|
Профиль | Сайт | Отправить PM | Цитировать Как-то решал похожую задачу: требовалось отследить компьютеры, которые не перезагружаются больше месяца и вынудить пользователя перезагрузить компьютер, причем это должен был сделать именно пользователеь, чтобы потом не было жалоб на потерянные данные.
Выход нашел только один: 1. Написал приложение, которое в System Tray каждые 15 минут показывает облако, что нужно перезагрузить компьютер. 2. Руками (или скриптом) ставил его в планировщик на запуск один раз через 3 минуты от создания задания с режимом интерактивности (чтобы пользователь видел уведомления). 3. Как только приложение запускается, пользователь около часов видит иконку, и каждые 15 минут ему вываливается предупреждение, что компьютер нуждается в перезагрузке. 4. Как только компьютер перезагружен, задание пропадает и пользователь больше не уведомляется, что он давно не перегружал компьютер. Потом усовершенствовал программу и поставил ее как сервис, который время от времени проверяет как долго компьютер не перезагружали и, если требуется, появляется в System Tray. Но решение не прижилось, так как нужно было брать на себя отвественность за стабильность программы, дорабатывать ее и т.п., а времени на это нет - я администратор, а не программист. Итак, к чему все это рассказал. У нас в компании адресная книга тоже заполняется через HTA-приложение, которое запускается при логоне пользователя с определенными проверками (не чаще, чем раз в месяц, чтобы не нервировать пользователей). А так как нельзя запустить приложение от имени пользователя, не зная его пароля, то только и остается, что заставить его перезагрузить компьютер и применить доменные политики. Вот скрипт, как постваить программу-уведомлялку в планировщик удаленного компьютера. Но скажу сразу, что, возможно, тут что-то напутано с определение времени запуска команды. Я потом его переделывал. Если интересно, то последняя версия скрипта вот тут Выполнение команды на удаленном компьютере. set oShell = createobject("wscript.shell") set oFSO = createobject("Scripting.FileSystemObject") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") 'Проверка наличия на компьютере файла HaveToReboot.exe, удаление его If oFSO.FileExists(sWinDir & "\HaveToReboot.exe") Then oFSO.DeleteFile sWinDir & "\HaveToReboot.exe",True 'Копирование файла HaveToReboot.exe в папку Windows oFSO.CopyFile oShell.CurrentDirectory & "\HaveToReboot.exe", sWinDir & "\",True 'Указание пути к файлу HaveToReboot.exe на компьютере sCommand = sWinDir & "\HaveToReboot.exe" 'Указание имени компьютера (точка указывает на самого себя) sComputer = "." 'Подключение к WMI для создания запроса Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2") 'Запрос всех объектов класса Win32_TimeZone (временная зона) Set oColTime = oWMIService.ExecQuery("Select * from Win32_TimeZone") 'Получение информации о текущем часовом поясе компьютера For each oTime in oColTime if Month(Date) > 4 and Month(Date) <= 11 then iLocalBias = oTime.Bias - oTime.DaylightBias else iLocalBias = oTime.Bias end if Next 'Создание времени запуска задания: YYYYMMDDHHMMSS.MMMMMM(+-)OOO" 'Выбор смещения часовой зоны: OOO Select case Len(cStr(Abs(iLocalBias))) case "0" ATCommand = "Error! No information about remote computer time settings." wscript.quit case "1" sLocalBias = "00" & cStr(Abs(iLocalBias)) case "2" sLocalBias = "0" & cStr(Abs(iLocalBias)) case else sLocalBias = cStr(Abs(iLocalBias)) End select 'Выбор знака для смещения часовой зоны (+-)OOO If iLocalBias >= 0 then sOOO = "+" & sLocalBias Else sOOO = "-" & sLocalBias End if 'Выбор времени запуска задания (3 минуты от текущего времени) If Len(cStr((Minute(Time) + 3))) = 1 then sMM = "0" & cStr(Minute(Time) + 3) Else sMM = cStr(Minute(Time) + 3) End if If Len(cStr(Hour(Time))) = 1 then sHH = "0" & cStr(Hour(Time)) Else sHH = cStr(Hour(Time)) End if sYYYYYMMHHMMSS = "********" & sHH & sMM & "00.000000" 'Сборка времени запуска задания sStartTime = sYYYYYMMHHMMSS & sOOO 'Создание объекта планировщика Set oJob = oWMIService.Get("Win32_ScheduledJob") 'Установка задания errJobCreated = oJob.Create (sCommand, sStartTime, False , , , true, JobID) 'help for method Create(Command, Time, RunRepeatedly, DaysOfWeek to run,DaysOfMonth to run, InteractWithDesktop, JobID) 'Проверка результата установки задания If errJobCreated = 0 then ATCommand = "The job was successfully set on " & sComputer Else ATCommand = "Error! The job has not been set." End if |
------- Отправлено: 10:39, 15-04-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Вывод имени текущего пользователя | Sadowod | Скриптовые языки администрирования Windows | 24 | 27-12-2012 10:13 | |
C/C++ - Запуск приложения от имени другого пользователя в Borland Builder C++ 6 | DaRiYs | Программирование и базы данных | 5 | 08-12-2009 01:54 | |
Доступ - Запуск от имени другого пользователя. | alexnj | Microsoft Windows 7 | 0 | 08-05-2009 20:35 | |
Разное - Запуск от имени пользователя.. | Великий Кукурузо | Microsoft Windows Vista | 26 | 29-10-2008 09:03 | |
Как получить имя текущего пользователя для использования его в имени файла | Denchik | Автоматическая установка Windows 2000/XP/2003 | 1 | 25-01-2006 22:33 |
|