1 (изменено: alexii, 2014-02-20 01:58:48)

Тема: JScript: Скрипт для выполнения команды с админскими правами

Пытаюсь остановить сервис таким скриптом на удалённой машине таком скрипте Jscript


var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run ("runas /user:DOMAIN\admin \"net stop messenger\" ", 2);  
WScript.Sleep (500); 
WshShell.Sendkeys ("12345~"); 
WScript.Sleep (500);

Но не получается. Открывается новое окно с запросом пароля, потом закрывается и никого эффекта...
Подскажите пожалуйста, что поправить

2

Re: JScript: Скрипт для выполнения команды с админскими правами

Не понятно - а как скрипт запускаете ?  По коду совсем не видно имени удаленной машины.


Если это делаете прямо на той машине в сессии пользователя, то вместо js-скрипта сделайте cmd-файл остановки локального сервиса и запускайте его от имени другой у/з (shift + ПКМ: Run as different users)

Если таки на своей машине запускаете, то можно средставами wmi к удаленной машине подключиться для остановки её сервиса.

WBR. Roman

3

Re: JScript: Скрипт для выполнения команды с админскими правами

Это процедуру необходимо проделать на >1000 машинах. Скрипт запускается средствами samb ы.  Скрипт должеп выполнить команду с адмискими правами (как того требует упешное выполнение net stop "название службы"). Пользователь, естественно, не должен вводить никакие пароли. В чём и загвоздка.

4

Re: JScript: Скрипт для выполнения команды с админскими правами

Домен есть?

5

Re: JScript: Скрипт для выполнения команды с админскими правами

Есть. На SAMBA.

6

Re: JScript: Скрипт для выполнения команды с админскими правами

И групповые политики там поддерживаются?

7

Re: JScript: Скрипт для выполнения команды с админскими правами

Нет. Без групповых политик. SAMBA < 4  версии, поэтому нет поддержки ГП.

8

Re: JScript: Скрипт для выполнения команды с админскими правами

Тогда используйте Wbem, метод «StopService» класса «Win32_Service»: StopService method of the Win32_Service class (Windows).

9

Re: JScript: Скрипт для выполнения команды с админскими правами

А от имени admin этот метод можно будет приминить, не требуя от пользователя ввода паороля?

10

Re: JScript: Скрипт для выполнения команды с админскими правами

А причём тут пользователь?! Вы — администратор?

11

Re: JScript: Скрипт для выполнения команды с админскими правами

redserpent, возможно, имелся в виду запуск пользователем скрипта, в котором автоматически передаются данные у/з с правами админа ?


Тогда, по идее поможет подключение к WMI не через моникёр "winmgmts:", а через "SWbemLocator" - и логин-пароль можно будет указать прямо в коде метода "ConnectServer()":

http://www.script-coding.com/WMI.html - "Подключение к WMI в сценариях WSH с помощью объекта SWbemLocator"

WBR. Roman

12

Re: JScript: Скрипт для выполнения команды с админскими правами

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

13

Re: JScript: Скрипт для выполнения команды с админскими правами

redserpent, Вы бы объяснили глобальную цель сих действ.

14

Re: JScript: Скрипт для выполнения команды с админскими правами

SAMBA настроена так, что при аждом входе пользователей в домен у них автоматически срабатывает простой скрипт - батник. Батник выпоняет некоторые настроечные действия:  net time, net us и р. Но эти действия не требуют админских прав. А вот чтобы глобально отключить какую-либо службу комадами net stop и sc config требуются администраторские права. А runas не позволяет просто передать пароль. Как минимум требебуется однократный ввод пароля. Это неприемлимо. Поэтому я стал смотреть в сторону WSH. Сам  батник  формирует Perl скрипт на сервере.

15

Re: JScript: Скрипт для выполнения команды с админскими правами

Делайте это не от имени пользователя. Т.е., назначить это действие не на вход пользователя в систему:

+ открыть спойлер

http://img18.imageshack.us/img18/6662/828h.png

а на сценарий автозагрузки, выполняемый от имени системы:

+ открыть спойлер

http://img577.imageshack.us/img577/339/h5d0.png

Мне другое непонятно — зачем делать остановку службы каждый раз вместо того, чтобы единожды раз поменять её параметры запуска на «Отключено» или «Вручную»?!

16

Re: JScript: Скрипт для выполнения команды с админскими правами

Я эту службу и хочу отключить через sc config. Но предварительно её нужно остановить. И для того и для другого требуются права уровня админских. Но выполнить их без запроса пароля, прозрачно на каждой машине вызвало у меня трудности, из-за ограничений 'runas'. Как я уже писал, батник формируется для каждой машины при входе пользователя  Perl скриптом. Этот скрипт смотрит в базу и подключает шары. Индивидуально для каждого.

17

Re: JScript: Скрипт для выполнения команды с админскими правами

Большое спасибо за ответы, но как это скриптами сделать? От имени системы? Подскажите пожалуйста куда смотреть?

18

Re: JScript: Скрипт для выполнения команды с админскими правами

redserpent, у меня нет ни малейшего представления, как это может выглядеть в SAMBA.

19

Re: JScript: Скрипт для выполнения команды с админскими правами

Вы не поняли. Hе в SAMBA.  Мне нужно разобраться как это реализовать с помощью WSH.

20

Re: JScript: Скрипт для выполнения команды с админскими правами

Т.е. мне нужен такой скрипт, который мог бы отключить службу на машине

21

Re: JScript: Скрипт для выполнения команды с админскими правами

На VBScript:

Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Service WHERE Name = 'Messenger'")

For Each objSWbemObjectEx In collSWbemObjectSet
    If Not objSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
        WScript.Echo "Can't change start mode to [Disabled] for [Messenger] service."
        WScript.Quit 1
    End If
Next

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Вопросы?

22

Re: JScript: Скрипт для выполнения команды с админскими правами

спасибо огромное, сейчас буду разбираться!

23

Re: JScript: Скрипт для выполнения команды с админскими правами

Решено!

strComputer = "имя машины"

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _ 
(strComputer, "root\cimv2", _ 
"ДОМЕН\юзер", "12345")
Set colListOfServices = objSWbemServices.ExecQuery _
 ("Select * from Win32_Service Where Name ='имя службы'")
For Each objService in colListOfServices
    objService.StopService()
    objService.ChangeStartMode("Disabled")
    WScript.Echo "Stop and Disable Alerter service"
    WScript.Quit 1
Next

Замечания приветствуются!

К сожалению, как оказалось,из-за ограничений DCOM остановить/отключить службу под текущим пользователем используя другую учётку нельзя. Осталось автоматизировать процесс подстановки "имя машины". Есть у кого есть какие мысли как это лучше сделать?

Огромное Спасибо alexii и Rom5!