Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] русская переменная (http://forum.oszone.net/showthread.php?t=195712)

Kobzar 04-01-2011 14:50 1580492

русская переменная
 
Предположим что мы имеем некий скрипт который опрашивает службу "Супер мего служба"
и если она выключена - запускает ее! Скрипт налажен и настроен !


var ServiceName, WshShell, WshellApp;
WshShell = WScript.CreateObject("WScript.Shell");
WshellApp = WScript.CreateObject("Shell.Application");
ServiceName = "AudioSrv";
if (WshellApp.IsServiceRunning(ServiceName))
WScript.Echo ("Сервис ", ""+ServiceName , " запущен!")
else
WshShell.Run("sc start " +ServiceName 1, true);
WScript.Echo (ServiceName);

Вот в таком состоянии он работает. НО !
Если имя службы состоит из одного слова на латинице. В противном случае "Супер мего служба" - не отрабатывает , как как нужно передать это значение в скобочках (Лапки)
Как это сделать ?:

Petya V4sechkin 04-01-2011 16:03 1580535

Kobzar, попробуйте так:
Код:

var strComputer = ".";
var objWMIService = GetObject(
    "winmgmts:{impersonationLevel=impersonate}!\\\\" +
    strComputer + "\\root\\cimv2");

var ServiceName = "Супер мего служба";
var colServices = objWMIService.ExecQuery(
    "SELECT * FROM Win32_Service WHERE Name = '" + ServiceName + "'");

var e = new Enumerator(colServices);
for (; !e.atEnd(); e.moveNext())
  if (e.item().Started)
    WScript.Echo("Служба " + ServiceName + " запущена!")
  else
    e.item().StartService();

Кодировка Win-1251 (обычная).

Kobzar 04-01-2011 16:19 1580542

Ваш метод работает ! Я видел этот скрипт в инете! Но мне требовалось разобрать именно свой вариант !
Кстати - он тоже работает и имеет вид


Код:

var ServiceName, WshShell, WshellApp;
WshShell = WScript.CreateObject("WScript.Shell");
WshellApp = WScript.CreateObject("Shell.Application");
ServiceName = "1C:Enterprise 8.2 Server Agent";
'ServiceName = "AudioSrv";'
if (WshellApp.IsServiceRunning(ServiceName))
    WScript.Echo ("Сервис ", ""+ServiceName , " запущен!")
else
WshShell.Run("sc start \"" +ServiceName + "\"" , 1, true);


Petya V4sechkin 04-01-2011 16:30 1580552

Цитата:

Цитата Kobzar
Но мне требовалось разобрать именно свой вариант !

Непонятно, зачем из JS-скрипта вызывать консольное приложение sc.exe (если можно обойтись без этого).

Kobzar 04-01-2011 16:56 1580568

пример ?

Petya V4sechkin 04-01-2011 17:21 1580592

Цитата:

Цитата Kobzar
пример ?

Что?

Kobzar 05-01-2011 13:09 1581178

собственно немного мануала и вот оно

var i, ServiceName, WshShell, WshellApp;
WShell = new ActiveXObject("WScript.Shell");
WShellApp = new ActiveXObject("Shell.Application");
ServiceName = "TeamViewer6";

for (i=0; i<3; i++)
{
if (WShellApp.IsServiceRunning(ServiceName))
WScript.Echo ("Сервис " + ServiceName + " запущен!")
else
WShellApp.ServiceStart("" +ServiceName, false);
WScript.Sleep(5000);
}

Iska 05-01-2011 14:25 1581239

Два минуса данного подхода — то, что работает сие на локальной машине, и то, что нет возможности отловить неудачу запуска службы без лишних телодвижений. Особенно «красиво» смотрятся повторы. Вариант Petya V4sechkin'а идеологически более корректен.


Время: 19:47.

Время: 19:47.
© OSzone.net 2001-