从命令行使用PsTools控制其他PC

在介绍Sysinterals的“极客学校”系列今天的课程中,我们将向您展示如何使用PsTools实用程序集在本地和远程计算机上执行各种管理任务。

如果您曾经想要连接到另一台计算机并运行命令,快速获取有关正在运行的进程的信息并选择性地杀死它们,或者甚至停止另一台PC上的服务,您可以使用PsTools实用程序来执行所有这些操作,甚至更多。

显然,您可以使用远程桌面或类似的服务来连接到任何Windows计算机,实际查看桌面并执行任何本地操作,但是PsTools实用程序允许您从命令行执行许多任务-或者更好的做法是从脚本执行以后可以重复使用的任务。

这些都是在企业环境中工作得最好的实用程序类型,掌握这些工具肯定会让您更好地完成系统管理工作,节省时间,并让您以更智能的方式做事。更智能、更快地执行任务是成为优秀系统管理员的关键技能。

PsTools集合中有12个工具,虽然其中一些非常有用,但其他工具已经被较新版本的Windows中内置的工具所取代,还有一些工具对大多数人来说都是无用的。我们将详细介绍它们,以便您了解它们是如何工作的,以及您可能想要使用每一个的原因。

PsExec-在远程计算机上执行进程。 PsFile-显示通过网络在远程计算机上打开的文件。 PsGetSid-显示计算机或用户的安全标识符。 psInfo-列出有关系统的信息。 PsKill-按名称或ID终止进程。 psList-在命令行上列出有关进程的信息。 PsLoggedOn-列出登录到计算机或远程连接的帐户。 PsLogList-在命令行上提取事件日志。 PsPasswd-更改用户的密码。 psPing-具有一些附加功能的相当简单的ping实用程序。 PsService-列出并更改Windows服务。 PsShutdown-关闭、注销或挂起计算机。 PsSuspend-暂停和恢复进程(而不是终止它们)

所有这些工具都可以在本地计算机上使用,但它们主要用于连接到远程计算机并在其上执行命令。

连接到远程计算机(所有实用程序的语法)

所有实用程序都可以在本地或远程计算机上运行,因此如果需要,它们的计算机名都有相同的第一个参数。请注意,如果需要,您可以使用IP地址。如果省略此参数,该命令将在您的本地计算机上运行。

您还可以列出多台计算机,如psinfo\\computer 1、computer 2、computer 3,也可以将所有名称放入一个文件中并引用类似psinfo@computer list.txt的名称。最后的语法是psinfo\\*,它在域中的所有计算机上运行,您可能不会每天都使用它。

如果您需要使用备用凭据进行连接,因为您的本地计算机帐户的用户名和密码与另一台计算机不同,您可以使用-u和-p选项,不过我们会注意到,出于安全原因,您可能不希望在命令行上使用-p和命令中的密码。*更新:从PsExec的最新版本开始,没有工具再以明文形式传递密码,因此唯一需要担心的是是否有人可以读取您的脚本文件并在那里查看密码。

如果您处于域环境中,并且需要更改当前运行的用户,则命令的“user”部分将更改为“domain\user”。

注意:您通常需要使用管理员帐户连接到远程计算机。

配置远程管理访问

如果您处于域环境中(大多数需要使用PsTools的人都会这样),您可以完全忽略这一部分,因为一切都应该正常工作。对于在家庭环境中运行Windows 7、8或Vista的任何人,或者在没有域的办公室中使用几台计算机,您需要调整远程计算机上的用户帐户控制以允许PsTools正常运行。

微软很好地描述了这个问题:

换一种方式解释,当您尝试连接到另一台计算机并运行需要管理员访问权限的内容时,无法触发UAC提示并从您的计算机接受它,因此它不会以管理员身份连接。

这也不是一件坏事。假设恶意软件有您的本地用户名和密码,并且密码与另一台计算机相同,并且恶意软件非常棘手,而大多数计算机并非如此,那么您就不应该更改此设置,因为您不会完全理解您会允许恶意软件从一台计算机传播到另一台计算机。但这仍然不能掉以轻心。

同样,如果您在域环境中,则此问题不存在,也不需要更改。如果您只是在用一堆虚拟机进行测试,那么您就没有太多需要担心的了。

要调整UAC以使PsTools能够运行,您需要打开注册表编辑器并导航到以下项:

在此之后,在右侧创建一个新的32位DWORD,将其命名为LocalAccountTokenFilterPolicy并将其值设为1。您无需重新启动计算机即可使设置生效。

PsExec

PsExec可能是工具包中功能最强大的工具,因为您可以在本地命令提示符中执行任何命令,就像在远程计算机上执行命令一样。这包括可以在命令行上运行的任何东西-您可以更改注册表值、运行脚本和实用程序,或者从那台PC连接到另一台PC。所有命令的输出都将显示在您的本地PC上,而不是远程PC上。

语法很简单:

但实际上,您可能还希望在命令行中包含用户名和密码。例如,要连接到另一台PC并检查网络连接列表,您可以使用如下内容:

该命令将产生类似于以下内容的输出:

如果您希望将命令的输出传递给另一个命令,或者希望将输出重定向到文件中,通常只需执行类似命令d.exe>output.txt的操作,PsExec也会发生同样的情况。因此,下面这样的命令将把netstat-an的输出保存到本地计算机根目录上的一个文件中。

如果要通过PsExec连接将>或|字符传递到远程计算机,则需要使用^字符,这在Windows命令shell中是一个鲜为人知的转义字符。当然,这意味着我们实际上需要在远程计算机上使用命令shell,而不仅仅是运行进程,因此我们可以首先执行重定向或管道。因此,我们的命令如下所示(将路径更改为我们具有写访问权限的主目录)。

此示例将netstat生成的打开连接列表放入远程计算机上名为connections.txt的文件中的用户主目录中。

将程序复制到远程PC

使用PsExec时,您并不局限于远程PC上的应用程序,事实上,您可以运行本地拥有的任何东西。例如,如果要对远程系统执行Autoruns命令行扫描,但本地计算机上只有autorunsc.exe,则可以使用-c开关复制应用程序。命令完成后,PsExec将从远程系统中删除该工具。

这是提到大多数Sysinterals工具的-Accepteula选项的重要时刻,它将确保在运行命令的计算机上接受EULA。我们需要将其添加到autorunsc.exe命令中,否则它将在远程计算机上失败。

还有一些其他选项可指定是否始终复制应用程序,或者如果本地应用程序的版本高于远程应用程序,则是否应复制该应用程序。您只需在提示符下运行pexec即可查看这些选项。

注意:*如果某个命令仅在命令提示符下可用,则需要在其前面添加cmd/c。这包括管道和重定向,如|和>。

与远程PC上的登录用户交互

您可以使用-i开关启动应用程序,并允许远程用户实际与应用程序交互。您可能希望将其与-d开关结合使用,该开关在PsExec将控制权返回给您之前不会等待远程进程结束。例如,此命令将在远程计算机上打开记事本窗口:

您还可以选择以系统用户身份使用-s选项运行,这可能非常危险。例如,如果要在您自己的计算机上打开注册表编辑器,但具有系统用户级权限,则可以运行此命令。

如果您想知道,是的,这将使您能够访问许多您通常无法在注册表中编辑的内容。是的,这真的是个坏主意。

通过PsExec运行完整的命令提示符

是的,我们刚刚向您展示了如何通过PsExec…运行单个命令的所有示例。事实证明,您可以在本地计算机上运行实际在远程计算机上运行的完整shell。这就像您在该服务器的控制台上一样(在很大程度上)。幸运的是,这个函数的语法非常简单(如果需要,可以添加用户名)。

完成此操作后,您将拥有一个命令提示符,该提示符现在正在远程PC上运行。

命令提示符的工作方式几乎与正常一样,只是制表符补全不会进行任何操作,但这对我们来说很好。

值得注意的是,如果您想要在另一台计算机上远程运行PowerShell命令,您可以通过对配置进行一些调整来实现。不幸的是,PowerShell在PsExec中不能很好地工作,除非您使用一大堆不值得使用的奇怪的变通方法。

其他选择

pexec命令还有很多其他非常有用的选项可供您使用-每个选项都将在\\computer name之后、任何其他命令之前的空格中使用。因此,请考虑pexec\\computer name-option<remote command>。

如果您只从提示符运行pexec命令,而不使用任何额外的开关,您将看到所有这些命令。

PsFile

此命令显示当前在本地PC或远程PC上通过网络打开的文件,其操作类似于Windows“net file”命令。语法与工具包中的任何其他命令一样。

是的,这一次不像上一次那么有趣。

如果您想要关闭其中一个文件并断开此人与资源的连接,可以使用-c选项关闭连接,尽管这可能会导致数据丢失,因为该文件没有正确关闭。

PsGetSid

这将显示计算机或用户的安全标识符,并采用标准参数。该实用程序可能只在非常特殊的情况下才有用,而我们个人并没有遇到任何情况。所以试一次,然后忘掉它,直到有一天你需要使用它。

密码信息

该命令列出了许多关于系统的有用信息,包括正常运行时间,这非常有趣。假设您的Sysinterals工具位于PATH中,您只需在命令提示符下键入psinfo,就可以在本地运行此工具进行测试。

如果您想从PsInfo获得更多信息,我知道您是这样想的,那么您可以使用以下开关来添加磁盘信息(-d)和热修复程序(-h)以及已安装应用程序及其版本的列表(-s)。

这会产生更多信息,即使在几乎空白的虚拟机上也是如此:

您还可以通过添加计算机名称和用户名开关…来远程运行PSInfo。但有一个大问题:除非启用远程注册表服务,否则它将无法工作。请转到本文的末尾,在那里我们将讨论如何在远程计算机上启用它。

PsKill

此命令非常简单-它按名称或ID终止进程,您可以使用-t开关选择性地终止整个进程树。

PsKill的问题是,最新版本的Windows有一个非常强大的任务杀死实用程序,名为Taskkill,它有更多的功能。

PsList

该实用程序非常简单,但在快速查看计算机并查看是否使用了过多CPU或内存方面相当方便。您可以在命令行上指定名称或名称的一部分,以将列表缩小到仅有问题的应用程序,并且您可以看到几乎所有的信息,包括线程。

注意:要使此实用程序在远程计算机上工作,您需要启用远程注册表服务。一定要读到课程的最后,因为我们稍后会解释如何处理这一问题。

PsLoggedOn

此实用程序列出登录到计算机或远程连接的帐户。它非常简单,在系统管理员类型的环境中非常有用。

PsLogList

此实用程序在命令行上显示本地或远程事件日志,并且有许多选项可用于筛选数据。

还有-h、-d和-m选项,这些选项允许您将事件列表缩小到最近x个小时、天数或分钟。n选项显示列表x条记录,而-r开关颠倒顺序,因此最新的记录将显示在输出的底部。最后一个选项(在本例中我们将其设置为“System”)实际上并不是必需的-如果省略它,系统日志将始终被提取,但您可以将其更改为Application或Security以提取这些日志。

值得注意的是,如果您对另一台计算机具有管理员访问权限,则只需打开事件查看器,然后从“操作”菜单中选择“连接”即可。在列表中输入计算机名称,更改凭据(如果需要),然后以这种方式访问事件日志。

我们可以真正看到PsLogList真正有用的唯一场景是,如果您想要编写脚本,以便在事件日志中出现某些消息时执行操作。

PsPasswd密码

此实用程序允许您更改本地和远程用户的密码。语法与其他所有内容相同:

与仅从常规命令提示符使用net user相比,此实用程序的好处是您可以一次更改多台计算机的密码,而且它也可以在域环境中工作。

PsPing

此实用程序用于ping、检查端口,并执行延迟和带宽测试。很简单。

或者,您可以通过如下方式添加端口号来检查与端口的连接:

如果您需要进行一些网络故障排除,此命令有大量的高级选项,您可能需要查看这些选项。

PsService

此实用程序允许您从命令提示符处理Windows服务。它确实非常容易使用-语法是这样工作的:

查看帮助/?可以找到命令列表。选项,但是有几个选项您会发现自己比其他选项使用得更多。

查询-查询服务的状态。 配置-查询配置。 setconfig_-设置配置。 启动-启动服务。 停止-停止服务。 重新启动-停止然后重新启动服务。 暂停-暂停服务。 CONT-继续暂停的服务。 Depend-枚举依赖于指定服务的服务。 查找-搜索网络上的服务实例。 安全性-报告分配给服务的安全权限

特别是,start|stop|pause|Restart|cont选项非常简单易懂。例如,在下面的命令中,您可以将“start”替换为任何其他命令。

其他选项可用于查询有关服务的更多信息,或更改配置。

注意:内置的sc.exe实用程序有大量与此实用程序重叠的有用功能。主要区别在于,PsService的用户友好度稍高一些。

PsShutdown

此实用程序允许您关闭、注销计算机,甚至将计算机置于休眠模式。问题是它并不比内置的shutdown.exe实用程序好,而且实际上是为Windows XP设计的,因此建议在大多数情况下改用内置实用程序。

PsShutdown提供的一个选项是将计算机置于休眠模式的开关(-d),否则您无法获得该选项,该选项非常方便。

您还可以使用-h选项将计算机置于休眠模式。

PsSuspend

此实用程序与PsKill非常相似,但它可以做内置Taskkill实用程序所不能做的事情-您可以挂起进程而不是终止它们,如果您想在完成sysadmin任务时临时停止CPU密集型进程的运行,这会非常方便。

挂起进程非常容易:

恢复该过程同样简单-您只需添加-r开关即可。

当实用程序因远程注册表而无法连接时

其中一些实用工具(包括PsInfo、PsList、PsLogList和PsLoggedOn)要求在远程计算机上启用远程注册表服务,并且在现代版本的Windows上默认情况下不启用该服务。

好消息是这个问题很容易解决,而且您不必启用远程注册表。只需使用PsService运行此命令即可启动服务:

然后,当您使用PsInfo或PsList完成所有操作后,可以使用以下命令再次停止该服务:

简单的解决方案是最好的,不是吗?

下一课

明天一定要参加我们的活动,届时我们将介绍文件和磁盘实用程序,以及一些更有趣的内容。

相关文章