вот она - https://blog.instalator.ru/archives/47#more-47
цитирую автора (спасибо ему большое):
ГОВОРЮ СРАЗУ: я знаю про PsTools - https://technet.microsoft.com/ru-ru/sys ... tools.aspx и использую этот пакет программ, но тем не менее, мне понравилась реализация GetAdmin и я начал ее использовать у себя...Моему умному дому понадобилось управление компьютером. Немного поковыряв Delphi, написал небольшую программку, через которую с помощью обычных GET запросов можно отправлять горячие клавиши удаленному компьютеру, запускать процессы (команды для запуска и сами процессы настраиваются в программе), получать информацию о всех запущенных процессах, выключать\перезагружать компьютер.
Программа запускает http сервер, висит в трее и принимает GET запросы:
При этом раз я люблю создать себе доп.задачу, я написал метод и скрипт для GetAdmin!
Вот так это выглядит у меня в меню
Виджет(назовем его так) для выполнения команд(3 раза): и небольшая изюменка, виджет для добавления команд на удаленную систему:
вернее повторить то можно, но там используются мои классы и свойства, которые понадобиться создать или поменять на свои
и я, конечно, выложу сюда метод - 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> <b>'.$GA_ot.'</b>';
$timeGA = 'Время и дата выполнения: <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(";", "; ",$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> = '.$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' для 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> <b>'.$addGA_ot.'</b>';
$timeGA = 'Время и дата выполнения: <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); // записываем для меню
а ткже некоторая предварительная подготовка ПК (увы под управлением Windows) в домашней сети, а именно необходим доступ по локалке к сетевым папкам из ПК на котором MDM!
Вот!