系统极客一直在努力
专注于操作系统及软件使用教程

SysInternals系列:使用PsTools工具执行本地/远程PC管理任务

sysinternals-pstools-1

如果你希望使用命令行连接到远程计算机上执行各种管理工作,如查看远程计算机进程信息、关闭进程、甚至是管理远程 PC 中的 Windows 服务,PsTools 命令行工具包将是我们推荐的不二选择。在本次的 SysInternals 系列文章中,我们将介绍如何使用 PsTools 命令行工具执行本地/远程 PC 管理任务。

很明显,大多数刚入门的管理员都习惯使用 RDP 或其它类似的工具连接到远程 Windows 中进行图形化管理。而 PowerShell 及 PsTools 等工具可以帮助我们在命令行中执行相当多的管理任务,更主要的是可以将其写成脚本来执行周期性重复任务或在管理大批量服务器时提高效率。

在企业环境中掌握更多的命令行工具不仅可以节省时间,以更聪明和智能的方式完成工作,更是一个系统管理员所必需掌握的关键技能。

作为 Sysinternals 工具包中的一个子集,PsTools 本身就有十来个命令行小工具,下面我们会逐个为大家进行介绍:

  • PsExec – 在远程计算机执行命令
  • PsFile – 查看打开的网络文件
  • PsGetSid – 获取 Machine SID
  • PsInfo – 查看简要系统信息
  • PsKill – 按进程名或PID杀掉进程
  • PsList – 列出进程信息
  • PsLoggedOn – 显示已登的会话
  • PsLogList – 命令行获取 event log
  • PsPasswd – 更改用户密码
  • PsPing – 简单的tcp/udp连接测试工具
  • PsService – Windows 服务管理命令
  • PsShutdown – 关机、注销命令
  • PsSuspend – 暂停或恢复某个进程

以上所有命令都可以直接在本地计算机上使用,不过 PsTools 设计出来就是为了方便对远程 PC 进行管理的。

连接远程计算机

PsTools 所有工具连接远程计算机都可以使用同一个通用语法,例如:

psinfo \\pc1,pc2,pc3

双斜杠后面可以直接跟计算机名(可以解析netbios)、IP 地址或 FQDN,也可以在命令后跟多台计算机以实现批量。

如果你不是以域管理员等有权限的用户来执行命令、没有域环境或者需要手动指定有权限的远程用户,可用 -u 参数指定用户,-p 参数指定密码。

psinfo \\computername –u user –p Password

如果是域环境,需要将用户写为「DOMAIN\user」样式。

配置远程管理权限

PsTools 工具在域中可以工作得非常好,管理员不必考虑过多的权限问题。但对于工作组环境中的 Windows Vista/7/8/10,需要调整远程计算机上的用户账户控制(UAC)之后 PsTools 工具才能正常运行。

即便你是远程目标 PC 的 Local Administrators 组成员,在使用命令行进行远程连接时还是会使用类似 net use * \\remotecomputer\Share$ 的方式,这不被 Windows 视为有完全管理员权限。因为连接到远程计算机需要有权限才能执行管理任务,命令行连接方式也无法触发 UAC,所以直接远程连接使用 PsTools 工具远程连接工作组计算机会报权限错误。

要保证 PsTools 工具能在工作组环境中正常使用,你需要更改注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

在上述注册表路径中创建一个名为 LocalAccountTokenFilterPolicy 的 32 位 DWORD 值,并将其值设置为 1 即可。

sysinternals-pstools-2

PsExec

PsExec 是 PsTools 工具系列中最为常用的一个命令行工具,它可以让我们在本地或远程计算机上「运行」任何东西,包括更改注册表、执行脚本或应用程序等。参数类似:

psexec \\计算机名 <选项> apptorun.exe <参数>

例如你想查看某个远程计算机的 TCP/IP 配置,可以使用如下命令:

psexec \\计算机名 -u User -p Password ipconfig

sysinternals-pstools-3

如果你将命令输出重定向到一个文件中,可以使用常见的 command.exe > output.txt 方式,这种方式对 PsExec 命令同样适用,例如我们可以使用类似如下命令将 netstat -an 的输出保存到本地文本文件中:

psexec \\计算机名 netstat -an > C:\netstat.txt

如果你想将命令的重定向输出结果直接保存到远程 PC 当中,可以使用很少有人知道的 ^ 这个Windows 命令行转义符,例如:

psexec \\计算机名 cmd /c netstat -an ^> C:\users\sysgeek\netstat.txt

拷贝命令到远程PC

有时我们需要执行的 CDM 外部命令并没有存在于远程计算机当中,此时我们可以使用 PsExec 的 -c 参数来指定一个存放于管理员本地的外部命令或应用。当我们执行命令时,PsExec 会自动将所指定的应用复制到远程 PC 中执行,并在执行完成后自动删除。例如:

psexec \\计算机名 -c autorunsc.exe –accepteula

PsFile

psfile 命令可以显示本地或远程 PC 中通过网络打开的文件,其类似于命令行中的 net file 命令,及我们之前介绍过的 NetworkOpenedFiles 图形界面工具。

psfile \\计算机名

sysinternals-pstools-4

如果你想中断某个共享的访问连接,可以使用 -c 参数:

psfile \\计算机名 <路径> –c

PsInfo

PsInfo 主要用于显示 Windows 操作系统版本、系统运行时长及个别硬件的简单信息,如果你想获取更详尽的信息,可以使用 -d(磁盘信息)、-h(补丁信息)、-s(已知应用程序版本列表)参数,这样一来就比较像 Windows 内置的 systeminfo 命令行了。

psinfo -d -h -s

sysinternals-pstools-5

注意:要使用 PsInfo 获取远程计算机信息,目标 PC 必需启用了 Remote Registry 服务。

PsGetSid

PsGetSid 功能非常简单,就是用于获取 Machine SID 的。

sysinternals-pstools-6

PsKill

PsKill 看名称就不难猜,它可按进程名或 PID 结束进程,使用 -t 参数可以杀掉整个进程树。

pskill \\计算机名 

PsList

PsList 非常简单,它可以通过列表方式看到进程的几乎所有信息,包括线程数。

sysinternals-pstools-7

PsLoggedOn

PsLoggedOn 命令主要用于查看本地或远程 PC 上当前登录的用户信息,对于系统管理员来说非常实用。

sysinternals-pstools-8

PsPing

PsPing 是一个可对指定端口进行 TCP 或 UDP 连接测试的工具,该工具可用于替代 telnet 命令进行连接测试,我个人经常用其来测试连接 Azure 各项服务的响应速度。

psping IP地址或域名:80

sysinternals-pstools-9

PsPasswd

PsPasswd 用于快速更改本地或远程 PC 的用户密码,例如:

pspasswd \\计算机名 -u User -p Password <账户名称> <新密码>

该命令相较 net user 的好处在于可以一次性批量修改多台计算机的密码,对于域管理员批量重置某些本地账户密码时非常有用。

PsShutdown

该命令主要是针对早期 Windows XP 用户设计,现在 Windows 中内置的 Shutdown.exe 命令已经非常强大了,所以使用较少。我们还是可以使用 PsShutdown 的 -d 参数让计算机进入睡眠模式。

PsSuspend

该命令行工具与 PsKill 比较类似但不是杀掉进程,它主要用于暂停某个进程的工作。

pssuspend \\计算机名 <PID或进程名>

要将已暂停的进程恢复到工作状态,只需加上 -r 参数即可。

PsService

PsService 命令行工具可操作 Windows 中的各种服务,其语法如下:

psservice \\计算机名 <操作> <服务名>

例如,要启用某个服务时,命令行如下:

psservice \\计算机名 start 

用的操作有start(启动)、stop(停止)、pause(暂停)、restart(重启),要查看详细参数可以使用 PsService /?

该工具与 Windows 内置的 sc.exe 命令比较类似,但使用 PsService 对管理员更友好。

PsLogList

PsLogList 顾名思义是用于查看本地或远程 PC 中的 Event Log(事件日志)的命令行工具,它内有很好用的数据筛选功能。

psloglist \\计算机名

其中的 -h-d-m 参数可以按小时、天、月来缩小返回的事件时间范围,-n 参数用于指定要返回的条数,-r 可以反向排序。例如我们要查看远程计算机中近 1 小时的 3 个事件日志,可以使用:

psloglist \\计算机名 -h 1 -n 3

sysinternals-pstools-10

分享到:更多 ()