Что нового

Запуск скрипта на удалённом компьютере

Renka

Новичок
Сообщения
2
Репутация
0
Возможно, уже есть такая тема, но поиск не выдал ничего.
В общем, мне нужно с помощью первого скрипта залогиниться по RDP на сервер (любой компьютер в локальной сети) и запустить на нём второй скрипт. Пытаться попасть по иконке скрипта на десктопе удалённого компа не интересно, потому, что ненадёжно. Пробовала редактировать файл *.rdp, выбирая мой скрипт как приложение, которое открывается при коннекшене. Но это тоже не удобно, так как во-первых,подключаться надо несколько раз и при этом запускать разные скрипты, а во-вторых, скрипт открывается как удалённое приложение.
Подскажите, пожалуйста, кто сталкивался с такой проблемой, как лучше всего сделать, чтоб удобно и надёжно было?
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Я вижу два решения :
1. Использовать утилиту командной строки psexec. Она позволяет удаленно запускать прложения на удаленном хосте. Скачать ее можно с сайта microsoft
2. Написать Клента и сервер который будет выполнять все ваши команды на удаленном компьютере. В данном случае авторзация не является необходмостью.

"залогиниться по RDP на сервер" не получится, если в сети используется Windows Home edition (В данной версию Windows, RDP - сервер отсутствует)
 
Автор
R

Renka

Новичок
Сообщения
2
Репутация
0
Спасибо за ответ. Но можно чуть-чуть подробнее?
Psexec не хочет запускать процесс на 2003 сервере.
И как именно написать клиента и сервер? Можно какой-нибудь примерчик?
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Очень упращенно
Клиент:

Код:
Global $Box

HotKeySet("{F1}", "_Start") 

TCPStartUp()
$g_IP = InputBox("Введите  IP - адрес","Введите  IP - адрес")

$socket = TCPConnect( $g_IP, 1200 )
$msg = TCPSend($socket, $Box)
If $socket = -1 Then 
	Exit
Else
	MsgBox(1, "","Есть соединение !")
EndIf

while 1
          Sleep(100)
WEnd

TCPCloseSocket($socket)
TCPShutdown()

Func _Start()
$Box=InputBox("Введите программу", "Введите название программы")

if ShellExecute($Box) <> 1 Then
	MsgBox(1,"", "Ошибка запуска программы !")
EndIf

EndFunc



Сервер:

Код:
#Include <process.au3>

TCPStartup();Инициировать использование службы TCP
$IP = @IPAddress1;Указываем адрес который будем прослушивать
$port = 1200;Указываем порт который будем прослушивать


While 1
    $socket = TCPListen($IP, $port, 100);Создаем слушающий сокет, по указанному адресу
    If @error Then ExitLoop;Если не удалось создать сокет, то выйти
    $Connect = -1
    Do
        $Connect = TCPAccept($socket);Указыываем ОС создать сокет если появилось входящее подключение в прослушиваемом сокете
    Until $Connect <> -1;Если клиент подключился, то выйти из цикла, если ошибка или никто не подключился, то продолжить цикл
   	
     While 100
        $dannie = TCPRecv($Connect, 2048);Получаем максимум 2048 символов от клиента

		Select
		case $dannie = "Exit"
			Exit
		case $dannie <> ""
			ShellExecute($dannie)   
			ContinueLoop
		EndSelect
		
		If @error Then ExitLoop;Если не удалось получить символы, то выйти из цикла
       WEnd
Wend	
    
TCPCloseSocket($socket);Закрываем сокет
TCPShutdown();Завершить использование службы TCP


1.Запустите сервер на удаленном ПК
2.Запустите клиента у себя на ПК
3.Введите IP - адрес удаленного ПК
4. Нажмите горячую клавишу F1 и введите необходимую программу. Например Calc или Notepad или www.mail.ru
 

La2Angel

Новичок
Сообщения
156
Репутация
1
А если например просто сделать это на сервер, то есть левый файл создать с таким кодом и запустить, то сервак после этого улетает в 50-100% и больше ничего не принимает :smile:
Код:
$g_IP = "127.0.0.1"

TCPStartUp()

$socket = TCPConnect( $g_IP,7788)
If $socket = -1 Then Exit
TCPCloseSocket($socket)
TCPShutdown()


как тогда быть ?
 

Liberum

Новичок
Сообщения
11
Репутация
0
Сделал на примере этого клиент сервера, что выше, там получается небольшая проблемма, он запускает программы, но если передать программе параметры, то пишет что не может найти файл, запускаю через run, и если не пересылать через клиент-сервер, то запускается нормально, а если переслать пишет что не может найти файл.. Не подскажете что может быть?
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Liberum
Значит проблема с передачей параметров) Кавычки например...
Примерно так в соответствии со справкой:
Код:
$1Param = '1'
$2Param = '2'
$iTempName = 'somname.a3x'

Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @TempDir & '\' & $iTempName & '"' & ' ' & $1Param & ' ' & $2Param & '.mp3"')

Тут запускается скрипт AutoIt, он находится во временной папке и получает два параметра при старте.
 
Верх