Hey,
ich bin gerade dabei, das Scipt von http://www.autoitscript.com/forum/topic/128310-plink-wrapper/ etwas umzubauen.
Leider habe ich jetzt plötzlich das Problem, dass der Prozess plink.exe seine PID während der Ausführung wechselt. Dadurch funktioniert mein Script nicht mehr richtig.
Spoiler anzeigen
Global $_plink_loc = "plink.exe"
Global $_plink_logfile = "plink.log"
Global $_plink_logging = False
_plink_log_enable(True)
$ssh = _plink_open("whatever", "root", "123", 3000)
_plink_close($ssh)
Func _plink_open($_plink_server, $_plink_user, $_plink_pw, $_plink_timeout)
If $_plink_loc = "" then
SetError(1)
Return False
EndIf
If $_plink_server = "" then
SetError(2)
Return False
EndIf
$_plink_handle = Run(@comspec & " /c " & $_plink_loc & " -ssh " & $_plink_user & "@" & $_plink_server & " -pw " & $_plink_pw, @ScriptDir, @SW_MINIMIZE, 7)
If @error Then
SetError(3)
Return False
EndIf
_plink_expect($_plink_handle, "(.*)*@(.*):(.*)$", $_plink_timeout)
If @error Then
SetError(4)
EndIf
Return $_plink_handle
EndFunc
Func _plink_close($_plink_handle)
If Not ProcessClose($_plink_handle) Then
SetError(1)
Return False
Else
Return True
EndIf
EndFunc
Func _plink_write($_plink_handle, $output)
StdinWrite($_plink_handle, $output)
EndFunc
Func _plink_writeln($_plink_handle, $output)
StdinWrite($_plink_handle, $output & @CR)
EndFunc
Func _plink_read($_plink_handle, $_plink_timeout)
Local $text
Local $sBuffertext
Local $iBegin = TimerInit()
While 1
$text = StdoutRead($_plink_handle)
If $text == "" Then ExitLoop
$sBuffertext = $sBuffertext & $text
if $_plink_logging Then
_plink_log($text)
If @error Then
SetError(1)
Return False
EndIf
EndIf
If TimerDiff($iBegin) > $_plink_timeout then
ExitLoop
EndIf
sleep(100)
WEnd
Return $sBuffertext
EndFunc
Func _plink_wait($_plink_handle, $_plink_timeout)
Local $text
Local $sBuffertext
Local $iBegin = TimerInit()
While 1
$text = StdoutRead($_plink_handle)
$sBuffertext = $sBuffertext & $text
if $_plink_logging Then
_plink_log($text)
If @error Then
SetError(1)
Return False
EndIf
EndIf
If TimerDiff($iBegin) > $_plink_timeout then
ExitLoop
EndIf
sleep(100)
WEnd
Return $sBuffertext
EndFunc
Func _plink_expect($_plink_handle, $match_text, $_plink_timeout)
Local $text
Local $found
Local $iBegin = TimerInit()
While 1
$text = StdoutRead($_plink_handle)
If $text <> "" Then
if $_plink_logging Then
_plink_log($text)
If @error Then
SetError(1)
Return False
EndIf
EndIf
$found = StringRegExp($text, $match_text)
[/autoit] [autoit][/autoit] [autoit]If $found = 1 Then Return True
EndIf
If TimerDiff($iBegin) > $_plink_timeout Then
SetError(2)
Return False
EndIf
sleep(100)
WEnd
EndFunc
Func _plink_log_enable($enable)
$_plink_logging = $enable
EndFunc
Func _plink_log($_plink_log_text)
$_plink_logfile_handle = FileOpen($_plink_logfile, 1)
If $_plink_logfile_handle = -1 Then
SetError(1)
Return False
EndIf
If FileWriteLine($_plink_logfile_handle, @HOUR & ":" & @MIN & ":" & @SEC & " - " & $_plink_log_text) = False Then
SetError(2)
Return False
EndIf
If FileClose($_plink_logfile_handle) = False Then
SetError(3)
Return False
EndIf
EndFunc
Hat jemand vllt. eine Ahnung, woran das liegen könnte? Vielen Dank