Jump to content

Recommended Posts

Posted (edited)

Psexec return my error codes, but not shellExecute:

exemple:

Script remo.exe:

Exit 12345

if i run it through cmd:

c:\>psexec.exe \\192.168.116.125 -u administrator -p abc123 -cf test.exe

PsExec v1.94 - Execute processes remotely

Copyright © 2001-2008 Mark Russinovich

Sysinternals - www.sysinternals.com

test.exe exited on 192.168.116.125 with error code 12345. --->>here is my error code (12345)

How i can get this error code send this command through ShellExecute?

ShellExecute("psexec.exe", "\\192.168.116.125 -u administrator -p abc123 -cf test.exe")

*******

My attempt:

In This case i got empty message :)

$foo=ShellExecute("psexec.exe", "\\192.168.116.125 -u administrator -p abc123 -cf test.exe")
            Local $errcode=StdoutRead($foo)
            MsgBox(0,"",$errcode)
Edited by Vofffka
Posted

$rc = ShellExecuteWait() ?

Tested, the same result :)

From Help File for functions ShellExecute and ShellExecuteWait:

Return Value

Success: Returns the exit code of the program that was run.

Failure: Returns 0 and sets @error to non-zero.

Therefore both variants with ShellExecute and ShellExecuteWait will not return my error codes, i don't know how do it(

  • Developers
Posted (edited)

Ok, looks like psexec doesn't set its own RC to the remote shelled programs RC.

You will have to capture the STDOUT/STDERR information and retrieve it from there.

Look at StdOutRead()/StdErrRead() in the helpfile.

Jos

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Posted (edited)

Ok, looks like psexec doesn't set its own RC to the remote shelled programs RC.

You will have to capture the STDOUT/STDERR information and retrieve it from there.

Look at StdOutRead()/StdErrRead() in the helpfile.

Jos

$foo=ShellExecute("psexec.exe", "\\192.168.116.125 -u administrator -p abc123 -cf test.exe")
            Local $errcode=StdoutRead($foo) ;also checked with StdErrRead() 
            MsgBox(0,"",$errcode)

result is the same.

Perhaps there is an easer way to realize this task. My scheme:

1. i have control.script that reading parameters from a config file

2. after that the control.script uploading on the remote boxes other installation scripts and run them with parameters

ShellExecute("psexec.exe", "\\192.168.116.125 -u administrator -p abc123 -cf test.exe firstparm secondparm etc")

3. this installation scripts do something

and me need to get response from them - result of execution

Edited by Vofffka
Posted

Have you checked the example in the helpfile for StdOutRead() ?

Don't think it is coded this way in there.

Jos

Thank you very match, Jos.

My code:

$foo=Run(@ComSpec & " /k psexec.exe \\"&$ip&" -u "&$login&" -p "&$passwd&$organization, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
            

Local $line

While 1
    $line = StderrRead($foo)
If @error Then ExitLoop
    if $line Then
    MsgBox(0, "STDERR read:", $line)
    EndIf
Wend

It's really work:)

Posted

I do not think that there is any benefit to running psexec via comspec.

Also, psexec was updated 07 May 2009

http://technet.microsoft.com/en-us/sysinte...s/bb897553.aspx

$psexecPATH = '"C:\Program Files\PStools\psexec.exe"'
$psexec_switches = "-i -d"

$computerNAME = ""
$user = ""
$psswd = ""

$cmd = "notepad.exe"
$cmd_arguments = ""

$sp  = " "
$user = " -u " & $user
$psswd = " -p " & $psswd 
$psexec = $psexecPATH & $sp & $psexec_switches & $sp
$comp = "\\" & $computerNAME & $user & $psswd & $sp

$final = $psexec & $comp & $cmd & $sp & $cmd_arguments
;~ MsgBox(0,"",$final)

;~ $PID = Run($final, @workingdir, @SW_HIDE, 8)
$PID = Run($final, @workingdir, @SW_HIDE, 6)

While 1
    $line = StdoutRead($PID)
    If @error Then ExitLoop
    MsgBox(0, "StdoutRead", $line, 1)
Wend

While 1
    $line = StderrRead($PID)
    If @error Then ExitLoop
    MsgBox(0, "StderrRead", $line)
Wend

[size="1"][font="Arial"].[u].[/u][/font][/size]

  • 2 weeks later...
Posted

I have tried I couldnt resolve my problem.

I want to report if psexec can not connect remote computer.

I think I must read psexec's result.

How can I write to a file if psexec can not connect remote computer?

I do not think that there is any benefit to running psexec via comspec.

Also, psexec was updated 07 May 2009

http://technet.microsoft.com/en-us/sysinte...s/bb897553.aspx

$psexecPATH = '"C:\Program Files\PStools\psexec.exe"'
$psexec_switches = "-i -d"

$computerNAME = ""
$user = ""
$psswd = ""

$cmd = "notepad.exe"
$cmd_arguments = ""

$sp  = " "
$user = " -u " & $user
$psswd = " -p " & $psswd 
$psexec = $psexecPATH & $sp & $psexec_switches & $sp
$comp = "\\" & $computerNAME & $user & $psswd & $sp

$final = $psexec & $comp & $cmd & $sp & $cmd_arguments
;~ MsgBox(0,"",$final)

;~ $PID = Run($final, @workingdir, @SW_HIDE, 8)
$PID = Run($final, @workingdir, @SW_HIDE, 6)

While 1
    $line = StdoutRead($PID)
    If @error Then ExitLoop
    MsgBox(0, "StdoutRead", $line, 1)
Wend

While 1
    $line = StderrRead($PID)
    If @error Then ExitLoop
    MsgBox(0, "StderrRead", $line)
Wend
Startup Agent It is my small Startup Agent. You can install programs on startup Domain pc without Admin rights.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...