桌面文件PsTools 入门
Wes Miller
下载这篇文章的代码: MillerTheDesktopFiles2007_03.exe (150KB)
到去年为止,我一直在 Winternals Software 公司工作。Winternals 公司于 2006 年 7 月被 Microsoft 收购,公司专门经销商业软件。但其创始人 Mark Russinovich 和 Bryce Cogswell 还拥有一家名为 Sysinternals 的独立公司,该公司以免费软件形式发行了许多工具。在这些免费软件应用程序中,有些
甚至已经发展成为 Winternals Administrator's Pak 中的组件。Mark 和 Bryce 还超出典型免费软件许可条款的范围将这些工具的许可授予那些寻求使用这些工具的公司。
在 Sysinternals 工具库中(没错,它是一整套的工具),PsTools 套件是我所喜爱的工具之一,该工具位于 microsoft.com/technet/sysinternals/utilities/pstools.mspx。Mark 将这些工具以 UNIX 进程列表实用程序 ps 命名。正如这些工具的下载网站上所述,有些内置的 Windows® 命令行实用程序与这些工具有着相同的功能。但除了重要的独特功能外,两者的主要区别在于 PsTools 套件既可本地使用,又可远程使用(当然,前提是必须正确配置远程系统)。更为可喜的是,其远程运行过程几乎与本地运行过程一样简单。
PsTools 套件包含几个单独的应用程序,如图 1 所列。如同其他 Sysinternals 实用程序一样,没有安装程序,而只有应用程序。只需将它们放在所选路径的某个文件夹中就万事大吉了!
Figure 1 PsTools 实用程序
现在,您可能注意到,这一功能的某些环节(特别是 PsLogList)可以通过 Windows Management Instrumentation (WMI) 和一些复杂的脚本来实现。但 PsTools 套件的特点在于,每个实用程序都旨在完成某一项特定的任务,简单而又容易。
我将逐个工具加以介绍,并通过简单的示例来说明工具的用途及用法。但首先,我要简要介绍一下这些工具的工作原理以及要使这些工具能够工作必须满足哪些前提条件。
工具的工作原理
这些工具通常都以相同的方式工作。在主机系统上启动所需的 PsTool。尽管许多工具都可以在本地运行,但您会发现这些工具在针对一个远程系统运行时或在同时针对多个系统运行时最能发挥其效用。(PsExec 是我所想到的一个特例,在下面的示例中您就会看到。)实用程序使用您所提供的命令行参数,来将其自身复制到远程系统的管理共享,这一管理共享与远程系统上的 %SystemRoot%(Windows 目录)相同。
一旦复制到远程目录中,该应用程序即会自行启动并将安装 Windows 服务。该 Windows 服务会使用启动时您所提供的凭据来执行您所请求的任务。如果该特定工具需要客户端系统上的某个最终用户 UI,该服务会在用户上下文中启动附加的二进制文件。(请记住,服务不能抛出直接交互的 UI。)该服务再将任何必要的信息返回给启动它的控制台。最后,该服务会自行卸载。
您可以看到,这些工具是强大而独立的。尽管它们会涉及多个二进制文件和多个进程,但作为用户的您却不必担忧,您只需运行所需的工具,它就会完成任务。
要使用这些工具,必须满足以下前提条件:具有 Windows NT®、Windows 2000、Windows XP 或 Windows Server® 2003(支持 Windows 的 x86 或 x64 版本,但不支持 Itanium 版本);在运行这些工具的远程系统上启用默认的管理网络共享 (admin$);在远程系统上打开用于文件和打印机共享的端口(无论使用的是 Windows 防火墙、Internet 连接防火墙,还是其他防火墙产品)。
PsExec
PsExec 是这些工具中我个人所偏爱的工具,个中原因或许并不是您想象的那样。在两年中,我有大半的时间一直以“非管理员用户”的身份运行我的系统,也就是说,我以“用户”身份而非“管理员”身份运行。而我有一个用来以本地管理员身份运行应用程序的简短脚本,称为 run.vbs(以用户身份也可以同样轻松地运行这些应用程序)。图 2 显示了该脚本的内容(也可在 TechNet 杂志网站的 technetmagazine.com/code07.aspx 获得该脚本)。该脚本假定 PsTools 在 Path 系统变量中。
Figure 2 Run.vbs
当我们在 Winternals 开发 Protection Manager 产品时,Mark 添加了一个功能:即允许受限用户提供更高权限的凭据来在本地启动 PsExec。这个简单的脚本就是将 PsExec 用于这一功能的一个示例。当然,PsExec 更常用来远程运行,例如用来运行一个不提供自身远程、脚本或自动处理框架的实用程序。PsExec 的两个主要功能包括将所要执行的二进制文件复制到远程系统以及规定处理器关联。PsExec 的另一个有用功能是可以通过提供脚本文件来针对许多计算机同时进行脚本处理。
以下是简化的 PsExec 用法:
通过图 3 所示的开关可以扩展这一用法。
Figure 3 PsExec 开关
PsFile
与 PsExec 相比,PsFile 是更加有所侧重的工具。具体来说,它用于检查谁在远程系统上打开了哪些文件。如果要在重新引导服务器前跟踪哪些文件处于打开状态,此工具会很有用。如果需要查明哪位用户锁定了该文件(或许是为防止进行编辑或删除),可以手动进行通知,或者通过 PsFile 将文件关闭。PsFile 的用法如下:
此命令只会返回远程系统上所打开的文件句柄的列表。除了标准用法之外,还可以向语句中添加 Id 参数,以指定要查找相关信息或者要关闭的文件的名称。其中还可以包括 -c 开关,表示将关闭 Id 参数所标识的文件。
PsGetSid
PsGetSid 也是一个很有侧重的工具。它会告诉您计算机、用户或组的安全标识符 (SID)。如果要确保域中的系统不存在重复的 SID 或者只想在某个系统上验证所有用户或组的 SID,此工具会很有用。PsGetSid 的用法如下:
请注意,account 可以指定用户、计算机或组。尽管 PSGetSid 的语法非常简单,但它仍提供了一些附加的参数。SID 参数用于指定具有指定 SID 的帐户(组或计算机),@file 用于针对指定文本文件中所列的所有计算机运行该命令。
PsInfo
PsInfo 用于提供详细的系统信息。显然,这在针对多个远程系统编制脚本时最为有用,其输出内容会发送到某个文件(例如 Excel® 和数据库可以识别的 CSV 文件)。请注意,此实用程序的运行依据一个不同于大多数其他工具的重要概念:在默认情况下,如果不提供计算机名称,PsInfo 会尝试查询域中的所有计算机。PsInfo 的用法如下:
虽然其语法简单,但也提供了几个附加的开关和参数,如图 4 所示
Figure 4 PsInfo 开关
PsKill
PsKill 是用于在本地或远程系统上终止进程的有效实用程序。其用法非常简单,并且可以快速终止某个进程及其所有子进程。PsKill 的用法与上面介绍的其他工具非常类似:
请注意,您可以指定要终止的进程 id 或进程名。
PsList
我是一个 Process Explorer 迷,所以不大使用 PsList(有关详细信息,请参阅 microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx。)但由于 Process Explorer 没有远程版本,所以 PsList 理所当然成为 Process Explorer 一些主要功能的替代品。实际上,PsList 是在远程系统上运行的一个或多个进程的列表。
PsList 的用法相当简单:
与其他工具一样,account 参数可以指定用户、计算机或组。其他参数如图 5 所示。
Figure 5 PsList 开关
PsList 功能强大且简单易用,您无需使用远程桌面即可相当详细地查看远程进程。在需要(例如您有必须进行控制的进程)时,可以利用此信息移到 PsKill 或 PsSuspend。
PsLoggedOn
PsLoggedOn 背后的前提假定是不言自明的。它用于显示登录到系统中的用户。这可以是本地(交互式)登录或网络共享登录。与 PsFile 相似,此功能对于确定谁在使用您所需要维护的服务器是很有用的。其用法很简单:
PsLoggedOn 只有两个可选参数:-l 只显示本地登录(而不包括网络登录),-x 不包括登录时间。
PsLoggedOn 尽管是一个基础性的工具,但它允许您轻松地查看到通常必须要通过搜索几个 Windows 位置才能获得的信息。
PsLogList
作为最常用的实用程序之一,PsLogList 工具用于将 Windows 事件日志转储为文本格式,这些转储的日志进而再用于日志读取器、数据库或其他任何需要的地方。其主要的优点是将事件日志项从二进制格式转换为易于转换或自动处理的格式。(当然,在 Windows Vista™ 中,事件日志原本就有 XML 格式,但那不是我们今天要谈的话题。)
PsLogList 的用法:
此实用程序还提供了许多附加的开关和参数,如图 6 所示。
Figure 6 PsLogList 开关
Windows 事件日志可以是一个强大得惊人的诊断工具,但其奥妙在于使数据变得可以操作或合并。PsLogList 就是这神奇的力量。
PsPasswd
PsPasswd 是一个简单而又强大的实用程序,其功能在某种程度上与 Net.exe 相同,但它还考虑到了远程可用性和自动化。
您可以指定计算机,也可以不指定计算机(针对本地系统运行),如果将计算机指定为 \*,则实用程序将针对当前域中的所有计算机运行。PsPasswd 只提供了一个附加参数:@file 用于针对文本文件中所指定的所有计算机运行该命令。同样,它也是一个非常基础性的实用程序,却能提供极强大的多系统功能。
PsService
通过 PsService,您可以在网络的一个或多个系统上查看和编辑“服务控制管理器”(SCM) 信息,甚至可以在网络的各系统上搜索给定的服务名。
运行 PsService 时,command 代表图 7 中所列的任一命令,options 用于指定应用于给定命令的属性。如果不提供附加命令开关,PsService 会完整地转储 SCM 信息。
Figure 7 PsService 命令
因此,您可以将 PsService 视为 Services.msc 功能强大的远程命令行版本,只是它还允许您跨网络查找服务(可能具有潜在的危险)以及设置配置信息。
PsShutdown
PsShutdown 是我所喜爱的另一个工具。尽管有人会说 Microsoft 中包含一个用于处理此任务的工具 (shutdown.exe),但它们的确是不同的。两者的主要区别在于 PsShutdown 具有以下功能:它可以关闭或重新启动远程系统。此外,它还可以将系统置为待机或休眠模式(而不仅仅是关闭或重新启动)、锁定系统以及在通过消息提示用户一段给定的时间后重新启动系统。
PsShutdown 也提供了许多附加参数,如图 8 所示。
Figure 8 PsShutdown 开关
您会发现,PsShutdown 是一个非常强大、可配置性强的系统电源控制实用程序,而且使用起来相对比较简单。
PsSuspend
如果要暂时控制一个恶意进程,或者只是要在不丢失任何数据或应用程序上下文的情况下暂时中止对 CPU 占用率高的进程,PsSuspend 将不失为一个便利的实用程序。
可以通过 PsList 获得进程 ID。挂起某个进程后,可使用 -r 开关进行恢复。请注意,Process Explorer 也会实现挂起和恢复某个进程的概念,但只是在本地。而 PsSuspend 可以通过远程及本地方式挂起和恢复进程,这显然比 Process Explorer 中内置的实现方式更具优势。
结束语
我发现 PsTools 套件是一个价值不可估量的实用程序集。连同其余的 Sysinternals 实用程序(即,Regmon、Filemon、Process Explorer 以及现在的 Process Monitor)一起,PsTools 是我在所有系统上重新安装 Windows 时第一批放入路径变量中的程序。如果您以前不了解 PsTools,我希望本专栏能让您对它有所熟悉;如果您以前就知道 PsTools,我也希望本专栏能让您对这些工具有进一步的了解。当然,我要多谢 Mark Russinovich 这些年来一直免费提供这些工具,并帮我完成本专栏的内容。
Wes Miller 是德克萨斯州奥斯汀市 Pluck 公司 (www.pluck.com) 的一位开发经理。在这之前,Wes 在位于奥斯汀市的 Winternals Software 公司任职,并曾在微软担任 Windows 程序经理和产品经理。Wes 的联系方式如下:。
© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.
到此这篇nsenter命令作用(nststat命令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/33621.html