如何使用 PsExec 执行远程命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 PsExec 执行远程命令相关的知识,希望对你有一定的参考价值。

psexec下载完成后,将psexec压缩包解压到指定的一个路径,比如d:\psexec 。然后,打开cmd命令提示符,输入
d:
cd psexec
psexec
然后,就可以开始调用远程EXE文件了。比如远程IP为:192.168.1.2,管理员用户:Administrator,密码为:123456,要执行的EXE在c:\test.exe,具体命令如下:
psexec \\192.168.1.2 -u Administrator -p 123456 -i "c:\test.exe"
这样就可以远程调用EXE程序了,你可以根据自己需要调用不同参数
参考技术A 实用工具(如 Telnet)和远程控制程序(如 Symantec 的 PC Anywhere)使您可以在远程系统上执行程序,但安装它们非常困难,并且需要您在想要访问的远程系统上安装客户端软件。

PsExec 是一个轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。

PsExec 最强大的功能之一是在远程系统和远程支持工具(如 IpConfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。

psexec是一个远程执行工具,你可以像使用telnet一样使用它。

它的使用格式为:

psexec \\远程机器ip [-u username [-p password]] [-c [-f]] [-i][-d] program [arguments]

它的参数有:
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。
(如果没有-p参数,则输入命令后会要求你输入密码)

-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)

-d 不等待程序执行完就返回
(比如要让远程机器运行tftp服务端的时候使用,不然psexec命令会一直等待tftp程序结束才会返回)

-i 在远程机器上运行一个名为psexesvc进程,(到底什么用弄不明白)

假设我在远程机器ip有一个账号,账号名是:abc 密码是:123
比如想要用telnet一样在远程系统上执行命令可以打:(远程系统要开admin$)
psexec \\远程机器ip -u abc -p 123 cmd

如果想要远程机器执行本地c:\srm.exe文件可以打:
psexec \\远程机器ip -u abc -p 123 -c c:\srm.exe

如果想要让远程机器执行本地上tftp服务端,(假设tftp服务端在本地c:\tftp32.exe),可以打:

psexec \\远程机器ip -u abc -p 123 -c c:\tftp32.exe -d

来自 ant 的 PsExec 不会终止

【中文标题】来自 ant 的 PsExec 不会终止【英文标题】:PsExec from ant does not terminate 【发布时间】:2010-09-10 07:46:51 【问题描述】:

我想在远程 Windows 机器上启动和停止 tomcat 服务器。我希望能够从 ant 脚本中执行此操作(因此我们的构建服务器可以执行此操作)。

我无法使用 sc.exe 解决这个问题,因为无法将用户名和密码传递给远程机器。

相反,我使用 psexec 在远程服务器上运行命令。我的 ant 脚本如下所示:

<target name="start_tomcat_server">
    <exec executable="psexec.exe" failonerror="true">
        <arg value="/accepteula"/>
        <arg value="\\test_host"/>
        <arg value="-u"/>
        <arg value="username"/>
        <arg value="-p"/>
        <arg value="password"/>
        <arg value="net"/>
        <arg value="start"/>
        <arg value="tomcat6"/>
    </exec>
</target>

如果我从命令提示符运行此命令,一切正常:psexec.exe /accepteula \\test_host -u username -p password net start tomcat6

但是,当我运行 ant 目标时,psexec 进程永远不会终止,它只是挂起这个输出:

start_tomcat_server: [执行] [exec] PsExec v1.98 - 远程执行进程 [执行] 版权所有 (C) 2001-2010 Mark Russinovich [执行] Sysinternals - www.sysinternals.com [执行]

任何想法我可以做些什么来完成这项工作?

【问题讨论】:

你试过用runas/netonly吗? microsoft.com/resources/documentation/windows/xp/all/proddocs/… ant -v 是否提供更多详细信息? 【参考方案1】:

花了一些时间后,我找到了解决方案。将参数“-d”提供给 psexec,它将脱离标准输出。

... ...

需要注意的一点,当加上'-d'时,psexec返回的是启动进程的PID而不是0,所以ant会认为命令失败。

【讨论】:

以上是关于如何使用 PsExec 执行远程命令的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 psexec 向远程计算机上启动的 cmd.exe 提供多个命令

PsExec相关命令

PSEXEC 通过命令提示符成功运行,但在 ASP .Net/C# 中失败

来自 ant 的 PsExec 不会终止

执行 PSEXEC 时出错

[PsTools]psexec.exe使用范例-运行远程电脑程序(exebat等)