Что нового

Завершить процесс на компьютере в локальной сети

iukash

Новичок
Сообщения
19
Репутация
1
Как это реализовать? Есть функция ProcessClose но это для одного компьютера, а как закрыть процесс на другой машине? И как запустить процесс на другой машине?
 

Arei

Скриптер
Сообщения
938
Репутация
115
OffTopic:
сделайте если приходит с сервера на клиент тест, с процессом и определенным кодом, то выполнялась закрытие его.А на деле не могу подсказать, так как с серверами-клиентами в Autoit не работаю.
 

VladUs

Скриптер
Сообщения
621
Репутация
181
можно воспользоваться утилитами командной строки из пакета PStools от Руссиновича,
В частности Psexec и Pskill. А можно и самому написать клиента и сервер для этих целей
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
Писать клиент сервер для этой задачи, тем более на autoit это извращение! А вот утилитки pstools посмотрю! Спасибо!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
iukash [?]
Как это реализовать?
Попробуйте через WMI:
Код:
; "Target Computer" - путь к компьютеру. 
; Локальная машина  _CloseRemoteProcess(".", "Notepad.exe")

_CloseRemoteProcess("Target Computer", "Notepad.exe")

Func _CloseRemoteProcess($sComputer, $sProcess)
	
	$oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\cimv2")
	$cProcessList = $oWMI.ExecQuery("Select * from Win32_Process Where Name = '" & $sProcess & "'")
	
	For $oProcess in $cProcessList
		If Not $oProcess.Terminate() Then Return 1 
	Next
		
	Return 0
EndFunc
 

VladUs

Скриптер
Сообщения
621
Репутация
181
iukash [?]
Думаю что pstools вполне подойдет, но если нет то попробую! Спасибо!
Хм... А я уже программку наваял небольшую...


Код:
#include <GUIConstants.au3> 
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>

$GUI=GUICreate("ProcessClose",500, 600, 100, 200,$GUI_SS_DEFAULT_GUI)
$Cuilistview = GUICtrlCreateListView("№|Name|PID  ", 10, 10, 280, 450)
$GuiLabelComp = GUICtrlCreateLabel("Ip - addres",300,8,120,30)
$GuiInputComp = GUICtrlCreateInput("",300,30,150,30)
$GuiLabelName = GUICtrlCreateLabel("Name User",300,80,120,30)
$GuiInputName = GUICtrlCreateInput("",300,100,150,30)
$GuiLabelPass = GUICtrlCreateLabel("Pass User",300,150,120,30)
$GuiInputPass = GUICtrlCreateInput("",300,170,150,30)
$GuiLabelPass = GUICtrlCreateLabel("PID",300,200,120,30)
$GuiInputPid = GUICtrlCreateInput("",300,230,150,30)
$butoon1      = GUICtrlCreateButton("Get Proc", 300,280,150,30)
$butoon2      = GUICtrlCreateButton("Kill Proc", 300,330,150,30)
ControlDisable($GUI,"",$butoon2 )
ControlDisable($GUI,"",$GuiInputPid )
GUISetState()

$msg = GUIGetMsg()
while $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
	Select
	case $msg = $butoon1
		$Comp = GUICtrlRead ($GuiInputComp)
		$Name = GUICtrlRead ($GuiInputName)
		$Pass = GUICtrlRead ($GuiInputPass)
		if $Comp="" or $Name = "" or $Pass = "" Then
			MsgBox(64,"Не заполнены поля", "Не заполнены некоторые поля")
		else
		_GetProc($Comp,$Name,$Pass)
		ControlEnable($GUI,"",$butoon2 )
		ControlEnable($GUI,"",$GuiInputPid )
		EndIf
	Case $msg = $butoon2 
		$Comp = GUICtrlRead ($GuiInputComp)
		$Name = GUICtrlRead ($GuiInputName)
		$Pass = GUICtrlRead ($GuiInputPass)
		$PID  = GUICtrlRead ($GuiInputPid )
		if $PID = ""  then 
			MsgBox(64,"Не заполнено поле PID", "Не заполнено поле PID")
			Else
		_ProcClose ($Comp,$Name,$Pass, $PID)
		EndIf
	EndSelect
	
wend


Func _ProcClose ($strComputer,$strUser,$strPassword, $ProcName)

$strDomain = "DOMAIN"	
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator") 
$objWMIServiceProc =  $objSWbemLocator.ConnectServer( $strComputer,"root\CIMV2",$strUser,$strPassword,"MS_409", "ntlmdomain:" & $strDomain)
$objShare = $objWMIServiceProc.Get("Win32_Process.Handle=" & $ProcName)
$objInParam = $objShare.Methods_("Terminate").inParameters.SpawnInstance_()
$objOutParams = $objWMIServiceProc.ExecMethod("Win32_Process.Handle=" & $ProcName, "Terminate", $objInParam)

EndFunc

Func _GetProc($strComputer,$strUser,$strPassword)
$strDomain = "DOMAIN"
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator") 
$objWMIServiceProc =  $objSWbemLocator.ConnectServer( $strComputer,"root\CIMV2",$strUser,$strPassword,"MS_409", "ntlmdomain:" & $strDomain)
$colItems = $objWMIServiceProc.ExecQuery( "SELECT * FROM Win32_Process") 
$item1 = 0
For  $objItem in $colItems 
$item1 +=1
 ConsoleWrite   ($objItem.Caption & "     " & $objItem.Handle & @CR)
 GUICtrlCreateListViewItem($item1 &"|" & $objItem.Caption &"|"& $objItem.Handle, $Cuilistview)
Next

EndFunc
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
VladUs спасибо большое! Но в скрипте ошибка
C:\MAIN\Autoit\Scripts\ud_kill_process.au3(58,77) : ERROR: $ohbjShare: undeclared global variable.
$objInParam = $ohbjShare.Methods_("Terminate").inParameters.SpawnInstance_()
 
Автор
I

iukash

Новичок
Сообщения
19
Репутация
1
В моем скрипте нет $ohbjShare, а есть $objShare. Вы зачем то вписали h
Блин видимо кликнул случайно когда скрипт смотрел! Да, сейчас запускается! Спасибо!
 
Верх