Страница 1 из 2

GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Ср янв 24, 2018 3:32 pm
Vovix
Я тут наткнулся на интересную для меня вещь, а именно - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ - GetAdmin
вот она - https://blog.instalator.ru/archives/47#more-47

цитирую автора (спасибо ему большое):
Моему умному дому понадобилось управление компьютером. Немного поковыряв Delphi, написал небольшую программку, через которую с помощью обычных GET запросов можно отправлять горячие клавиши удаленному компьютеру, запускать процессы (команды для запуска и сами процессы настраиваются в программе), получать информацию о всех запущенных процессах, выключать\перезагружать компьютер.
Программа запускает http сервер, висит в трее и принимает GET запросы:
ГОВОРЮ СРАЗУ: я знаю про PsTools - https://technet.microsoft.com/ru-ru/sys ... tools.aspx и использую этот пакет программ, но тем не менее, мне понравилась реализация GetAdmin и я начал ее использовать у себя...

При этом раз я люблю создать себе доп.задачу, я написал метод и скрипт для GetAdmin!
Вот так это выглядит у меня в меню
Виджет(назовем его так) для выполнения команд(3 раза):
Скриншот2.png
Скриншот2.png (84.84 КБ) 8629 просмотров
и небольшая изюменка, виджет для добавления команд на удаленную систему:
СпойлерПоказать
Скриншот 2018-01-24 16.04.18.png
Скриншот 2018-01-24 16.04.18.png (23.9 КБ) 8634 просмотра
У меня получилось очень специфично (индивидуально) и не уверен можно ли повторить это в другой системе
вернее повторить то можно, но там используются мои классы и свойства, которые понадобиться создать или поменять на свои
и я, конечно, выложу сюда метод - GetAdmin из своего класса OtherHardware (https://connect.smartliving.ru/profile/136/objects.html)
СпойлерПоказать

Код: Выделить всё

$GA_ot = $this->object_title;
$GA_ip = $this->getProperty("IPint"); 
$GA_port = $this->getProperty("port");
$GA_online = $this->getProperty("online");
$GA_ol_color = $this->getProperty("online_color");

$GA_doit = gg('Sets.GA_cmd_txt');

switch ($GA_online) { // для fa
   case 0:
      $fa1 = "question-";
   break;
   case 1:
      $fa1 = "check-";
   break;
   case 2:
      $fa1 = "times-";
   break;
   default:
      // вообще, сюда попасть мы не должны
      $fa1 = "";
}
$str = '<i class="fa fa-'.$fa1.'circle" aria-hidden="true" style="color:'.$GA_ol_color.';"></i>&nbsp;<b>'.$GA_ot.'</b>';
$timeGA = 'Время и дата выполнения:&nbsp;<span style="float: right;"><b>'.date( "H:i:s - d.m.Y", time()).'</span></b>';

// проверим - это специальная команда выводящая список команд из файла GetAdmin.ini или нет ?
if ($GA_doit != '*') { // нет это не спец.команда, это команда из программы GetAdmin
   $GA_cmd = str_ireplace("-", "=", $GA_doit);
   $str = $str.'<span style="float: right;"><b>'.$GA_cmd.'</b></span><br>';
   $str = $str.$timeGA.'<hr>';
   if (preg_match("/(key=[A-Z0-9+]+$)|(cmd=[a-zA-Z0-9_]+$)|(chk=[a-zA-Z0-9+-_]+$)/", $GA_cmd)) { // через рег.выражения выявим ошибки синтаксиса
      $result = getURL('http://'.$GA_ip.':'.$GA_port.'/?'.$GA_cmd, 0);
      //echo $result;
      if ($result == false) { // проверим - а вообще можем получить данные?
         
         $provresult = getURL('http://'.$GA_ip.':'.$GA_port.'/?chk=GetAdmin', 0); // проверим выполив заведомо имеющейся командой
         
         switch ($GA_online) { // проверим варианты с учетом online/offline терминала
            case 0:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- нет доступа по сети к <b>'.$GA_ot.'</b>;<br>';
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- команда <b>'.$GA_cmd.'</b> отсутствует на <b>'.$GA_ot.'</b>.<br>';
               }
            break;
            case 1:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- команда <b>'.$GA_cmd.'</b> отсутствует на <b>'.$GA_ot.'</b>.<br>';
               }
            break;
            case 2:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- нет доступа по сети к <b>'.$GA_ot.'</b>.<br>';
               } else {
                  $str = $str.'- команда <b>'.$GA_cmd.'</b> отсутствует на <b>'.$GA_ot.'</b>.<br>';
               }
            break;
            default:
               // вообще, сюда попасть мы не должны
               echo "ошибка в режиме онлайн!";
         }

      } else { // данные (ответ) получаем, сформируем их
         $str = $str.iconv ("CP1251", "UTF-8", $result);
         $str = str_ireplace("<html>", "",$str);
         $str = str_ireplace("</html>", "",$str);
         $str = str_ireplace("<p>", "<br>",$str);
         $str = str_ireplace("</p>", "<br>",$str);
         $str = ($GA_cmd == "cmd=process") ? str_ireplace(";", ";&nbsp;",$str) : $str;
      }
   } else { // регулярные выражения выявили ошибку
      $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
      $str = $str.'Причина: ошибка синтаксиса! => '.$GA_cmd;
   }
   $this->setProperty('GA_result', $str); // записываем в свой объект
   sg("Sets.GA_result", $str); // записываем для меню
 
} else { // да, это спец.команда
   $str = $str.'<span style="float: right;"><b>из GetAdmin.ini</b></span>';
   $str = $str.'<br>'.$timeGA;
   if (file_exists('\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini')) { // проверим доступность файла GetAdmin.ini
      // файл доступен, формируем список команд из него
      $config = parse_ini_file('\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini',true);
      $count = $config[Properties][Count];
      $max = $count * 4;
      foreach($config[Commands] as $key=>$object) {
         if (($object != "") && (strpos($key, "show") === false)) {
            if (strpos($key, "Command") !== false) {
               $str = $str.'<hr>';
               $object = '<span style="cursor:pointer"><font size="+1" color="red" onclick = "ajaxSetGlobal(\'Sets.GA_cmd_txt\', \'cmd='.$object.'\');">'.$object.'</font></span>';
               }
            $str = $str.'<font color="green">'.$key.'</font>&nbsp;=&nbsp;'.$object.'<br>';
         } 
         if (--$max <=0) break;
      }
   } else {
      // файл GetAdmin.ini не доступен, выясним причины
      $str = $str.'<hr>';
      $provresult = getURL('http://'.$GA_ip.':'.$GA_port.'/?chk=GetAdmin', 0); // проверим выполив заведомо имеющейся командой
         switch ($GA_online) { // проверим варианты с учетом online/offline терминала
            case 0:
            case 2:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- нет доступа по сети к <b>'.$GA_ot.'</b>;<br>';
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> не установлен;<br>';
                  $str = $str.'- на <b>'.$GA_ot.'</b> GetAdmin не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- к папке GetAdmin на <b>'.$GA_ot.'</b> нет доступа;<br>';
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> в другой папке.<br>';
               }
            break;
            case 1:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> не установлен;<br>';
                  $str = $str.'- на <b>'.$GA_ot.'</b> GetAdmin не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- к папке GetAdmin на <b>'.$GA_ot.'</b> нет доступа;<br>';
                  $str = $str.'- GetAdmin на <b>'.$GA_ot.'</b> в другой папке.<br>';
               }
            break;
            default:
               // вообще, сюда попасть мы не должны
               echo "ошибка в режиме онлайн!";
         }
   }
   $this->setProperty('GA_result', $str); // записываем в свой объект
   sg("Sets.GA_result", $str); // записываем для меню
}
И скрипт addGetAdmin
СпойлерПоказать

Код: Выделить всё

/*
* Сценарий 'addGetAdmin' для MajorDoMo 
* автор: Владимир Попов, на форуме - Vovix 
* дата последнего изменения: 18.01.2018
* обязательно наличие программы GetAdmin на управляемом устройстве (ПК)
* runScript('getAdmin', array('url'=>$хххх,'cmd'=>$yyyy,'port'=>$zzzz,'doit'=>$qqqq)) 
*/
$addGA_ot = ($params['name'] == '') ?  gg("Sets.addGA_name") : $params['name'];
$addGA_cmd = ($params['cmd'] == '') ?  gg("Sets.addGA_cmd") : $params['cmd'];
$addGA_path = ($params['path'] == '') ?  gg("Sets.addGA_path") : $params['path'];
$addGA_path = str_ireplace('/', '\\', $addGA_path);
$addGA_param = ($params['param'] == '') ?  gg("Sets.addGA_param") : $params['param'];
$addGA_show = ($params['show'] == '') ?  gg("Sets.addGA_show") : $params['show'];

$GA_ip = gg($addGA_ot.'.IPint'); 
$GA_port = gg($addGA_ot.'.port');
$GA_online = gg($addGA_ot.'.online');
$GA_ol_color = gg($addGA_ot.'.online_color');

$addGA_file = '\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini';

switch ($GA_online) { // для fa
   case 0:
      $fa1 = "question-";
   break;
   case 1:
      $fa1 = "check-";
   break;
   case 2:
      $fa1 = "times-";
   break;
   default:
      // вообще, сюда попасть мы не должны
      $fa1 = "";
}
$str = '<i class="fa fa-'.$fa1.'circle" aria-hidden="true" style="color:'.$GA_ol_color.';"></i>&nbsp;<b>'.$addGA_ot.'</b>';
$timeGA = 'Время и дата выполнения:&nbsp;<span style="float: right;"><b>'.date( "H:i:s - d.m.Y", time()).'</span></b>';

   $str = $str.'<br>'.$timeGA;
   $str = $str.'<hr>';
   $imput = "";
   $impstr = "";
   //$str = $str.'<span style="float: right;">наж. на красн.ком.и потом выполн.</span><br>'.$timeGA;
if (file_exists($addGA_file)) { // проверим доступность файла GetAdmin.ini
      // файл доступен, формируем список команд из него
      $config = parse_ini_file('\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini',true);
      if (!copy($addGA_file, $addGA_file.'.old')) { // скопируем файл ini с изменением расширения и проверим смоги ли
       // не смогли скопировать
       
      } else { // смогли скопировать
         
         $count = $config[Properties][Count];
         $input = "[Properties]"."\r\n";
         $inpstr = '<font color="blue"><b>[Properties]</b></font><br>';
         foreach($config[Properties] as $key=>$object) {
            if ($key == 'Count') { $object = $object + 1; }
            $input = $input.$key.'='.$object."\r\n";
            $inpstr = $inpstr.'<font color="green">'.$key.'</font>='.$object."<br>";
         }
         $c_str = $count * 4;
         $i = 0;
         $input = $input."[Commands]"."\r\n";
         $inpstr = $inpstr.'<font color="blue"><b>[Commands]</b></font><br>';
         foreach($config[Commands] as $key=>$object) {
            if (($i == $c_str)||($i == $c_str + 1)||($i == $c_str + 2)||($i == $c_str + 3)) {
               if (strpos($key, "Command") !== false) {
                  $key = "Command_".$count;
                  $object = $addGA_cmd;
               }
               if (strpos($key, "Path") !== false) {
                  $key = "Path_".$count;
                  $object = $addGA_path;
               }
               if (strpos($key, "Param") !== false) {
                  $key = "Param_".$count;
                  $object = $addGA_param;
               }
               if (strpos($key, "show") !== false) {
                  $key = "show_".$count;
                  $object = $addGA_show;
               }
            } 
            $input = $input.$key.'='.$object."\r\n";
            $inpstr = $inpstr.'<font color="green">'.$key.'</font>='.$object.'<br>';
            $i++;
         }
       
         $fd = fopen( $addGA_file , "w+" );
         fwrite( $fd , $input , strlen( $input ) );
         fclose( $fd );
      }

} else {
      // файл GetAdmin.ini не доступен, выясним причины
      $str = $str.'<hr>';
      $provresult = getURL('http://'.$GA_ip.':'.$GA_port.'/?chk=GetAdmin', 0); // проверим выполив заведомо имеющейся командой
         switch ($GA_online) { // проверим варианты с учетом online/offline терминала
            case 0:
            case 2:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- нет доступа по сети к <b>'.$addGA_ot.'</b>;<br>';
                  $str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> не установлен;<br>';
                  $str = $str.'- на <b>'.$addGA_ot.'</b> GetAdmin не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- к папке GetAdmin на <b>'.$addGA_ot.'</b> нет доступа;<br>';
                  $str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> в другой папке.<br>';
               }
            break;
            case 1:
               $str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
               $str = $str.'Возможные причины:<br>';
               if ($provresult == false) {
                  $str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> не установлен;<br>';
                  $str = $str.'- на <b>'.$addGA_ot.'</b> GetAdmin не запущен;<br>';
                  $str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
               } else {
                  $str = $str.'- к папке GetAdmin на <b>'.$addGA_ot.'</b> нет доступа;<br>';
                  $str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> в другой папке.<br>';
               }
            break;
            default:
               // вообще, сюда попасть мы не должны
               echo "ошибка в режиме онлайн!";
         }
}
$str = $str.$inpstr;
sg($addGA_ot.".addGA_result", $str); // записываем в свой объект
sg("Sets.addGA_result", $str); // записываем для меню
Для воспроизведения у себя, если понадобиться вдруг кому, необходимо знание php
а ткже некоторая предварительная подготовка ПК (увы под управлением Windows) в домашней сети, а именно необходим доступ по локалке к сетевым папкам из ПК на котором MDM!
Вот!

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Ср янв 24, 2018 4:35 pm
Chainik
Vovix, отлично получилось!

Сам для управления по "локалке" использую TightVNC (http://www.tightvnc.com/). Но там, видимо, открытого API нет.

А вам, как говорит молодежь, "респект и уважуха" за то, что делитесь с общественностью наработками (а то чувствую, многие "жадничают").

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Чт янв 25, 2018 4:14 pm
webms
Vovix,круто! Спасибо

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Вт янв 30, 2018 12:51 pm
odinvolk
Vovix, если не сложно подскажите к чему привязана кнопка ВЫПОЛНИТЬ в меню (выполнить GetAdmin)

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Вт янв 30, 2018 7:37 pm
Vovix
odinvolk писал(а):Vovix, если не сложно подскажите к чему привязана кнопка ВЫПОЛНИТЬ в меню (выполнить GetAdmin)
не сложно! :D
кнопка ВЫПОЛНИТЬ запускает метод, и только:

Код: Выделить всё

callMethod(gg("Sets.GA_name").'.getAdmin'); 
т.к. перед этим select - имя терминала
в свойство Sets.GA_name кладет имя объекта!

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Сб авг 31, 2019 12:06 am
Divan
Решил автоматизировать регулировку яркости монитора, у меня не ноутбук, а стационарный компьютер и обычный LED монитор, на ноутбуках можно менять яркость экрана с помощью горячих клавиш, на моем ПК нет. Есть программа, называется Win10_BrightnessSlider, она аппаратно меняет яркость монитора, в настройках монитора значение яркости тоже меняется, не затемняет программно, как делают это другие программы, но я не знаю как ее можно связать с majordomo, так как в ней нет никаких настроек. Есть кто смог это сделать?

Я сейчас пока настроил таким образом, но это не совсем то, что мне нужно. Скачал и запустил две программы, Gamma Panel (работает на Windows 10) и GetAdmin, программы положил в одну папку, в Gamma Panel назначил горячие клавиши, сам ярлык Gamma Panel поместил в автозагрузку, настроил GetAdmin, а в majordomo просто создал сценарии.

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Вс сен 01, 2019 7:34 pm
xor
а чем плох nircmd, который в поставке системы идёт?

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Вс сен 01, 2019 10:58 pm
Divan
По мне GetAdmin в плане настройки проще, чем nircmd, не нужно заморачиваться с правами, с доступом.

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Пн сен 02, 2019 12:29 am
xor
Divan писал(а):
Вс сен 01, 2019 10:58 pm
По мне GetAdmin в плане настройки проще, чем nircmd, не нужно заморачиваться с правами, с доступом.
этак для каждой хотелки свою прогу ставить? звук-то на винде ниркомандером и так в МДМ штатно регулируется. права и доступ нужны такие же, как и для гетадмина, а возможностей там побольше.
Но выбор, конечно, у каждого свой. я просто не покупаю второй молоток, если нужно забить второй гвоздь)

Re: GetAdmin - ПРОГРАММА ДЛЯ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ!

Добавлено: Пн сен 02, 2019 12:41 am
Divan
Все должно быть максимально просто, getadmin сможет настроить любой пользователь, а nircmd это для гиков. Это как Windows и Linux.