从IIS运行PsExec:PsExecSVC挂在远程主机上

时间:2011-02-05 02:20:00

标签: c# iis-7 batch-file psexec

我正在尝试从网页上运行远程主机上的.bat文件。

PSEXECSVC(在主机上)将在批处理执行后挂起而不关闭,导致服务器无限期等待。
在控制台应用程序中运行完全相同的代码(参见底部)时,服务关闭,一切正常......

奇怪的部分是当批处理文件由一个衬管回声组成时:

@echo off
echo ------ Start -----
exit

PsExecSvc将关闭,页面上会显示"------ Start -----"。 (这就是我想要的......)

另一方面,

@echo off
echo ------ Start -----
echo echo2

exit

PSEXECSVC将在执行结束时挂起......

手动终止PSEXECSVC时,只显示"------ Start -----"和StdErr 打印:

  

PsExec v1.98 - 执行进程   远程

     

版权所有(C)2001-2010 Mark   Russinovich介绍

     

Sysinternals - www.sysinternals.com

     

句柄无效。

     

连接到novi2 ......

     

在novi2上启动PsExec服务......

     

使用PsExec服务连接   novi2 ...

     

在novi2上启动C:/dbInfo.bat ...

     

与PsExec通信时出错   novi2服务:

无论在批处理文件中运行什么,只重定向StdOut的第一行并且psexecsvc挂起(但在执行整个批处理之后:O)。

如果正在运行:

info.bat:

 @echo off
 cscript /nologo test.vbs
 exit

test.vbs:

Set objOut = Wscript.StdOut
objOut.WriteLine "----------------------------------"
objOut.Writeline "Win32_OperatingSystem instance"
objOut.Writeline "----------------------------------"
objOut.close
Wscript.quit 666

ConsoleApplication将打印所有内容并返回666

IIS只会在StdOut中获得“----------------------------------”,而psexecsvc将会挂起。 ..

以下是用于在C#中运行psexec的代码...

Process proc = new Process();

ProcessStartInfo procInfo = new ProcessStartInfo(@"C:/PsExec.exe", @"\\novi2 -u Domain\usernameadmin -p Password C:/info.bat");
procInfo.UseShellExecute = false;
procInfo.RedirectStandardOutput = true;
procInfo.RedirectStandardError = true;

proc.StartInfo = procInfo;

proc.Start();

String output = proc.StandardOutput.ReadToEnd();
String err = proc.StandardError.ReadToEnd();
Trace.WriteLine("Out >> " + output);
Trace.WriteLine("Err >> " + err);

proc.Close();

我在服务器上使用IIS 7,ASP MVC3和.NET4.0(来自VS2010的示例项目)和WinXP SP3用于主机。 为避免出现问题,IIS中的ApplicationPool使用与psexec相同的管理员帐户。

1 个答案:

答案 0 :(得分:3)

问题可能是远程主机(novi2)上的PSExecSvc自身没有清理,现在需要先删除才能成功运行。我现在在针对远程主机启动PSExec的每个脚本的末尾添加以下内容:

sc \\novi2 delete PSExecSvc

此外,如果您在上实例化PSExec 而不是远程主机,那么您需要确保添加交换机以接受其EULA,如下所示:

psexec \\HOST1 /accepteula -u userid -p password COMMAND

希望有所帮助, LIZZ