За последние 24 часа нас посетили 17667 программистов и 1723 робота. Сейчас ищут 885 программистов ...

Доступ к WMI на удаленном компьютере

Тема в разделе "Прочие вопросы по PHP", создана пользователем Medniy, 1 окт 2013.

  1. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Всем привет)
    Имеется задача - мониторинг и управление процессами на удаленной машине, код, вроде правильный, но работать не хочет, пишет ошибку - "Fatal error: in C:\wamp\www\MeteoTerminal\test.php on line 17",то есть -
    Код (Text):
    1. $objSWbemServices = $objSWbemLocator->ConnectServer($server, "root\cimv2", "IRAM", "IRAM");
    которая ни о чем мне не говорит (... вот сам код -

    Код (Text):
    1.  $server="192.168.1.231";
    2.     $killprocessname = "calc.exe";
    3.    
    4.    
    5.       //$obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . $server . '/root/cimv2', "MASTER","MASTER" );
    6.       $shell = new COM("WScript.Shell");
    7.      
    8.      
    9.      
    10.      
    11. $objSWbemLocator = new COM("WbemScripting.SWbemLocator");
    12. $objSWbemServices = $objSWbemLocator->ConnectServer($server, "root\cimv2", "IRAM", "IRAM");
    13. $objSWbemServices->Security_->ImpersonationLevel = 3;
    14. $obj = $objSWbemServices;
    15.  
    16.      
    17.       $process = $obj->execquery ( "SELECT * FROM Win32_Process WHERE Name='$killprocessname'" );
    18.       if ($process->count > 0)
    19.       {
    20.       foreach ( $process AS $row )
    21.                   {
    22.                     $shell->Run("taskkill /s ". $server . "/im $killprocessname /f /t", 2, false);
    23.                    
    24.                   }
    25.                   echo "<pre><b>Process ".$killprocessname." \r\nin server ". $server ." \r\nkilled!</b></pre>";
    26.       }
    27.                   elseif ($killprocessname != '.')
    28.                  
    29.             {
    30.                   echo "<pre><b>Process ".$killprocessname." \r\nin server ". $server ." \r\nnot running!</b></pre>";
    31.             }
    32.          
    33.        
    34.      $obj=Null;
    35.      $shell=Null
    уже неделю как мучаюсь, не могу понять в чем проблема
     
  2. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Для wmi есть родные vbs и js. Зачем костылять из-под php?
    По сабжу вариантов море, от рухнувшей службы RPC, до хз чего. Пользуйтесь родными инструментами, будут подробные сообщения об ошибках.
     
  3. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    мне нужно именно из-под php, т.к. это всего лишь одна из функций которую должна выполнять программа написанная на php

    Добавлено спустя 5 минут 33 секунды:
    .. а службу RPC проверил - работает)
     
  4. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Скрипа^WКомбайн не нужен, нужно нормальное разделение на модули, не стоит смешивать все в кучу.
     
  5. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    чего?))
     
  6. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Я к тому, что пусть работа с WMI будет вынесена в родные для этого условия, vbs, js, да хоть powershell. там генерируются необходимые результаты (txt, html...) - в каком душе угодно виде, и их уже грести из php.
     
  7. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    попытался JS использовать
    Код (Text):
    1.  var loc = new ActiveXObject("WbemScripting.SWbemLocator");
    2.             var svc = loc.ConnectServer(".", "root\\cimv2");
    3.             coll = svc.ExecQuery("select * from Win32_Process");
    4.             var items = new Enumerator(coll);
    5.  
    6.             while (!items.atEnd())
    7.             {
    8.                 WScript.Echo(items.item().Name);
    9.                 items.moveNext();
    10.                             }
    выводит пустую страницу, хотя в других проектах JS работает отлично.. может доступа нет?
     
  8. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    вполне
     
  9. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    хмм... интересно, что в IE JS скрипты работают, а в остальных браузерах - нет
     
  10. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Так, стоп.
    При чем здесь браузер?
    Речь шла о WSH, а не браузерном js.
     
  11. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    аа.. ну щас пороюсь в эту сторону тогда))
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  13. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    вроде, немного подразобрался в vbs, только как результат в HTML сгенерировать ?
     
  14. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Дело было давно (могу наврать с названиями, тут стоит проверить гуглой), вроде как нужно создать объект Scripting.FileSystemObject и в нем будет метод CreateTextFile в котором задается имя файла, а дальше дело техники writeline и все дела.
     
  15. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    вроде, получилось, спс)
     
  16. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    вот еще вопрос, по поводу процессов, запускать на удаленной машине их получается, но в интерактивном режиме - нет, возможны какие-либо варианты, чтобы запускался не просто процесс, но и графическая оболочка программы?
     
  17. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Насколько я знаю, по-моему нет, поскольку не проектировалось такое. Даже больше скажу, я не представляю как на винде запустить удаленно гуевое приложение (подсовывание во всякие автозапуски или прописывание в шедулер не рассматриваю), архитектурное особенность такое.
     
  18. Medniy

    Medniy Новичок

    С нами с:
    1 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    ну да, вычитал, что мелкомягкие прикрыли дыру, только процессы можно запустить, а если с гуи, то скрипт с созданием процесса должен лежать на той машине на которой он создается