ckozma
ckozma

Reputation: 49

Psexec works on command line but not in ASP

I am using PsExec to remotely fire a program. I can fire the actual program (not displayed here) or cmd.exe remotely with no problems whatsoever from the command line. When I try to fire it from ASP and C#, it will not trigger the command prompt, even though I am using the same exact string. Here is the string I am using that works every time, and the code that doesn't. Help please!

Working String:

C:\psexec \\10.0.0.25 -u Administrator -p password -d -i cmd.exe

Non-working code:

Process process = new Process();
        ProcessStartInfo psi = new ProcessStartInfo(@"C:\PsExec.exe")
        {
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            RedirectStandardInput = true,
            Arguments = @"\\10.0.0.25 -u Administrator -p password -d -i cmd.exe"
        };
        process.StartInfo = psi;
        var success = process.Start();

Upvotes: 0

Views: 928

Answers (3)

Faisal Ansari
Faisal Ansari

Reputation: 362

Well, I am right now doing some automation and have figured out a few things. Please see below code maybe it will help you out

public static void PSExec_Method()
    {
        try
        {

            string userName = @"ABC";
            string password = "ABC";
            string remoteMachine = "ABC";

             //How to restart AppPool
            //string operation = "stop";
            //string apppoolname = "APPPOOL";
            //string command = @"%SYSTEMROOT%\System32\inetsrv\appcmd " + operation + " apppool /apppool.name:\"" + apppoolname + "\"";

            string command = @"powershell -noninteractive Get-Content C:\tmp\tmp.csv -Head 5";
            //string command = @"ipconfig";

            string PSPath = @"C:\PSTools\PsExec.exe";
            string fullcommand = PSPath + " -u " + userName + " -p " + password + " \\\\" + remoteMachine + " -h cmd.exe /c " + command;


         
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = fullcommand;
            process.Start();
            Console.WriteLine(process.StandardOutput.ReadToEnd());
            Console.WriteLine(process.StandardError.ReadToEnd());
            process.WaitForExit();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }

Upvotes: 0

Erik Funkenbusch
Erik Funkenbusch

Reputation: 93434

One option, assuming you have control over the machine, is to setup the psexec command as a Task Scheduler job, then execute the task scheduler job from your ASP app. You can configure the task scheduler to run as an administrator, and when you fire off the job it will run under that credentials. You won't get any output that way though, so if that's an issue there may not be a good choice.

See How to run existing windows 7 task using command prompt for an example of running the task..

Upvotes: 1

Jay
Jay

Reputation: 258

It's been a while since I was a system administrator, but if I recall correctly psexec has to be run from an administrative command prompt. Maybe the account your app is running under doesn't have rights to reach across the network and do stuff to a remote machine?

Put this in your Page_Load temporarily:

Response.Write(Environment.UserName);

and run it again, it should show you the name you're looking for at the top of your app.

Upvotes: 1

Related Questions