Windows 命令详解(二):系统信息、进程与服务管理命令速查表

2026-07-29 Windows

上一篇讲文件和目录,这一篇讲「机器现在是什么状态」:装的是什么系统、谁在登录、哪些进程在跑、哪些服务该启动、计划任务在哪、注册表某个键是什么值。

这类命令的用途很集中——出故障时看现场、给远程机器做排查、给批处理提供判断依据。表里的语法与参数名同样照微软官方 Windows Commands 参考抄录,出处列在文末。

一、系统与硬件信息

命令 作用 基本写法 示例
systeminfo 输出系统配置、安全信息、产品 ID、硬件属性(内存、磁盘空间、网卡等) systeminfo [/s <computer>] [/fo {TABLE | LIST | CSV}] [/nh] systeminfo /fo list
hostname 只输出计算机名(完整名称的主机名部分) hostname hostname
whoami 显示当前登录用户的域和用户名 whoami [/upn | /fqdn | /logonid] whoami
ver 显示操作系统版本号 ver ver
wmic 在交互式命令行里取 WMI 信息 wmic <参数> wmic logicaldisk get name
driverquery 列出已安装的驱动及其属性 driverquery [/fo {table | list | csv}] [/nh] [/v | /si] driverquery /fo csv /nh

systeminfo 默认输出量很大,要挑着看格式就加 /fo list(竖排,一行一个字段)或 /fo csv(方便导进表格工具),/nh 去掉表头。远程抓取靠 /s <computer>,再配合 /u、/p 指定凭据。

whoami 单独敲只给一行 域名\用户名(本机账户是 计算机名\用户名)。要看得更细用这些开关:

开关 输出
/upn 用户主体名称(UPN)形式的用户名
/fqdn 完全限定域名(FQDN)形式的用户名
/logonid 当前用户的登录 ID
/user 当前域和用户名,以及账户的 SID
/groups 当前用户所属的用户组
/privileges 当前用户持有的安全特权
/claims 当前用户的声明信息
/all 把上面这些一次全列出来
/fo <format> / /nh 指定输出格式 / 去掉列标题

driverquery 加 /v 会输出详细信息(此时不能用 /si),/si 只列已签名驱动的信息,排查「某个驱动是哪个版本、有没有签名」时用它最快。

关于 wmic 有个必须知道的事:官方参考页面顶部写着 WMIC 自 Windows 10 版本 21H1 起、以及 Windows Server 21H1 半年通道版本起已弃用,由 PowerShell 的 WMI 支持取代(被弃用的只是命令行工具 WMIC,WMI 机制本身不受影响)。老脚本里的 wmic 现在还能跑,但新写的东西建议直接用 PowerShell 的 Get-CimInstance,这一句的出处见文末 wmic 页面。

wmic 的常用子命令(官方页面列的):logicaldisk 显示逻辑磁盘属性,class 和 path 用来跳出默认别名模式直接访问 WMI 类,context 显示所有全局开关的当前值。典型用法是 wmic logicaldisk get name 只列出盘符。

二、进程

命令 作用 基本写法 示例
tasklist 列出本机或远程机器上正在运行的进程 tasklist [/s <computer>] [{/m <module> | /svc | /v}] [/fo {table | list | csv}] [/nh] [/fi <filter>] tasklist /v /fi "PID gt 1000" /fo csv
taskkill 结束一个或多个进程(按 PID 或映像名) taskkill [/s <computer>] {[/fi <filter>] [...] [/pid <processID> | /im <imagename>]} [/f] [/t] taskkill /pid 1230 /pid 1241 /pid 1253
tskill 结束远程桌面会话里的某个进程 tskill {<processID> | <processname>} [/server:<servername>] [/id:<sessionID> | /a] [/v] tskill explorer /id:5
query process / qprocess 查看远程桌面会话主机上运行着哪些进程、分别属于哪个用户 query process [* | <processID> | <username> | <sessionname> | /id:<nn> | <programname>] query process /ID:2
wmic process 取进程的 WMI 属性(命令行、父进程、启动时间等) wmic process get name,processid wmic process get name,processid

tasklist 有两个参数在排查时特别好用:/svc 会显示每个进程里承载了哪些服务(找「是谁占着这个服务」时一步到位),/m <module> 按「哪个进程加载了某个 DLL」过滤(排查 DLL 占用、被锁文件时用)。

/fi 是过滤器,官方给了完整的可用字段与运算符:

过滤字段 可用运算符 可用值
STATUS eq、ne RUNNING、NOT RESPONDING、UNKNOWN(指定远程系统时不支持)
IMAGENAME eq、ne 映像名
PID eq、ne、gt、lt、ge、le PID 数值
SESSION eq、ne、gt、lt、ge、le 会话号
SESSIONNAME eq、ne 会话名
CPUTIME eq、ne、gt、lt、ge、le HH:MM:SS 格式的 CPU 时间
MEMUSAGE eq、ne、gt、lt、ge、le 内存占用,单位 KB
USERNAME eq、ne 用户名或 域名\用户名
SERVICES eq、ne 服务名
WINDOWTITLE eq、ne 窗口标题(指定远程系统时不支持)
MODULES eq、ne DLL 名称

taskkill 的两组开关要分清楚:/pid 按进程 ID 杀、/im 按映像名杀,两个必须挑一个;/f 是强制结束,/t 是连子进程一起结束。官方示例里 taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe 这种组合就是「只杀属于某个用户的某个程序」。

tskill 和 taskkill 的区别在于会话:tskill 面向远程桌面会话主机,/id:<sessionID> 指定会话、/a 表示所有会话。

三、服务

官方 Windows Commands 参考里收录的 sc.exe 子命令是 query、config、create、delete 这四个(其余子命令用 sc.exe /? 在现场看)。

命令 作用 基本写法 示例
sc.exe query 查询指定服务的状态、类型等信息 sc.exe [<servername>] query [<servicename>] [type= {driver | service | all}] [state= {active | inactive | all}] sc.exe query
sc.exe config 修改服务的配置(启动类型、可执行文件路径、依赖等) sc.exe config [<servicename>] [start= {boot | system | auto | demand | disabled | delayed-auto}] sc.exe config NewService binpath= c:\windows\system32\NewServ.exe
sc.exe create 在注册表和 SCM 数据库里创建服务项 sc.exe [<servername>] create [<servicename>] [binpath= <binarypathname>] [type= {own | share}] [start= ...] sc.exe create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto
sc.exe delete 删除服务的注册表子键 sc <server> delete [service name] sc delete NewServ

几个官方文档里的细节值得单独记一下:

  • sc query 不带服务名时会枚举所有服务;输出被截断时(会出现类似 Enum: more data, need 1822 bytes start resume at index 79 的提示)按提示带上 bufsize= 和 ri= 重跑就能接着看,例如 sc.exe query bufsize= 1822 ri= 79。
  • sc config 里的 start= 值:boot、system、auto、demand、disabled、delayed-auto——demand 是手动启动,disabled 是禁用。
  • sc delete 删除正在运行的服务(或还有进程持有句柄)时,服务只是被标记为待删除,要等它停下来才会真正消失。
  • 写 sc 参数时等号后面那个空格不能省(binpath= C:\...),这是 sc.exe 自己的语法习惯。

四、登录会话与注销

命令 作用 基本写法 示例
query user 查看远程桌面会话主机上的用户会话 query user [<username> | <sessionname> | <sessionID>] [/server:<servername>] query user USER1 /server:Server1
query session 查看服务器上的会话列表(含活动之外的各种会话) query session [<sessionname> | <username> | <sessionID>] [/server:<servername>] [/mode] [/flow] [/connect] [/counter] query session
quser 与 query user 同功能的短命令 quser [<username> | <sessionname> | <sessionID>] quser
qwinsta 与 query session 同功能的短命令 qwinsta [<sessionname> | <username> | <sessionID>] [/mode] [/flow] [/connect] [/counter] qwinsta
logoff 注销某个会话并删除该会话 logoff [<sessionname> | <sessionID>] [/server:<servername>] [/v] logoff 12

qwinsta 的典型输出长这样(官方示例):列出 SESSIONNAME、USERNAME、ID、STATE、TYPE、DEVICE 六列,STATE 是 active、listen、idle 这类状态。找「谁占着这台机器的会话」就看这个表,logoff <sessionID> 就能把指定会话踢掉。/counter 会附带会话的计数器信息。

五、计划任务

命令 作用 基本写法 示例
schtasks /query 列出计算机上计划运行的任务 schtasks [/query] [/fo {TABLE | LIST | CSV}] [/nh] [/v] [/tn <taskname>] [/xml] schtasks /query /fo LIST /v
schtasks /create 新建计划任务 schtasks /create /sc <scheduletype> /tn <taskname> /tr <taskrun> schtasks /create /sc minute /mo 20 /tn "Security Script" /tr D:\scripts\sec.vbs
schtasks /change 修改已有任务的属性 schtasks /change /tn <Taskname> [/{ENABLE | DISABLE}] schtasks /change /tn Virus Check /tr C:\VirusCheck2.exe
schtasks /run 立即启动某个任务(忽略它的计划时间) schtasks /run /tn <taskname> schtasks /run /tn "Security Script"
schtasks /end 结束由该任务启动的程序实例 schtasks /end /tn <taskname> schtasks /end /tn "My Notepad"
schtasks /delete 删除计划任务(不删任务里那个程序,也不中断正在运行的程序) schtasks /delete /tn {<taskname> | *} [/f] schtasks /delete /tn "Start Mail" /s Svr16
at 在指定时间点运行命令或程序(需要计划服务在运行) at [\computername] <time> [/interactive] [/every:date[,...]] <command> at 4:30pm /every:F "net send group leads status due"

/sc 支持的计划类型(官方列出的值):

取值 含义
MINUTE 按分钟间隔重复
HOURLY 按小时间隔重复
DAILY 按天间隔重复
WEEKLY 按周间隔重复
MONTHLY 按月间隔重复
ONCE 在指定的日期和时间运行一次
ONSTART 每次系统启动时运行
ONLOGON 任意用户登录时运行
ONIDLE 系统空闲时运行
ONEVENT 由指定的事件触发

几个实用组合:/mo 是间隔修饰符(/sc minute /mo 20 就是每 20 分钟)、/st 指定开始时间、/et 指定结束时间、/k 表示到点了就结束程序、/ru 和 /rp 指定任务以哪个账户运行,/rl 指定运行级别。

schtasks /query /fo CSV /nh >> D:\tasklogs\log.csv 这种写法可以把任务清单持续追加到一个 CSV 里(官方示例就是这么干的),用来做「任务有没有被人改动」的巡检。

schtasks /end 只能结束由任务启动的程序实例,要结束别的进程得换 taskkill——这句是官方页面里点明的分工。

六、注册表

命令 作用 基本写法 示例
reg query 列出指定子键下的子键与值 reg query <keyname> [{/v <valuename> | /ve}] [/s] [/f <data>] [{/k | /d}] [/c] [/e] [/t <Type>] [/reg:32] reg query HKLM\Software\Microsoft\ResKit /v Version
reg add 新增子键或值项 reg add <keyname> [/v valuename | /ve] [/t datatype] [/d data] [/f] reg add HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
reg delete 删除子键或值项 reg delete <keyname> [{/v valuename | /ve | /va}] [/f] reg delete HKLM\Software\MyCo /v Data /f
reg export 把指定子键导出成 .reg 文件 reg export <keyname> <filename> [/y] reg export HKLM\Software\MyCo\MyApp AppBkUp.reg
reg import 把 .reg 文件的内容导入本机注册表 reg import <filename> reg import AppBkUp.reg
reg copy 把一个子键复制到另一个子键 reg copy <keyname1> <keyname2> [/s] [/f] reg copy HKLM\Software\MyCo HKLM\Software\MyCoCopy /s /f
reg compare 比较两个子键的差异 reg compare <keyname1> <keyname2> [/s] reg compare HKLM\Software\MyCo HKLM\Software\MyCoCopy

用之前必须先弄清根键:本机可用的根键是 HKLM、HKCU、HKCR、HKU、HKCC;指定远程计算机时只有 HKLM 和 HKU 可用。远程写法是把计算机名拼进键路径,形如 \<computername>\HKLM\...。

键名里有空格要用引号括起来。reg query 的 /s 会递归查所有子键和值,/f <data> 按内容或模式过滤,/c 让过滤区分大小写,/e 只要完全匹配。/reg:32 和 /reg:64 用来指定访问 32 位还是 64 位注册表视图——在 64 位系统上排查「明明导入了但程序读不到」这类问题时,这一条经常是原因。

reg add 和 reg import 的返回值:0 表示成功,1 表示失败。

导出/导入是改注册表之前最省事的保险:reg export <键> 备份.reg 先留一份,改坏了双击还原或 reg import 回去。

七、组策略、电源与安装包

命令 作用 基本写法 示例
gpresult 显示远程用户和计算机的组策略结果集(RSoP) gpresult [/s <system>] [/user [<targetdomain>\]<targetuser>] [/scope {user | computer}] {/r | /v | /z | [/x | /h] <filename>} gpresult /r
gpupdate 立即刷新组策略设置 gpupdate [/target:{computer | user}] [/force] [/wait:<VALUE>] [/logoff] [/boot] [/sync] gpupdate /force
shutdown 关机、重启、休眠、注销本地或远程计算机 shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/fw] [/f] [/m \computer] [/t xxx] shutdown /r /t 60 /c "重启通知" /f
msiexec 安装、卸载、修复 MSI 安装包 msiexec.exe [/i][/a][/j{u|m|/g|/t}][/x] <path_to_package> msiexec.exe /i "C:\example.msi"
rundll32 调用按 Rundll32 规范编写的 DLL 里的函数 rundll32 <DLLname> rundll32 printui.dll,PrintUIEntry
verifier 驱动验证程序管理器,用于验证驱动程序 verifier /standard /all verifier /query

gpresult /r 是显示 RSoP 摘要、/v 显示详细策略信息、/z 显示全部可用信息;/scope 可以只取用户或只取计算机的部分。要输出成 HTML 报告就 /h <文件名>(/x 是 XML)。

shutdown 的参数里,几个容易记混的:/s 关机、/r 重启、/g 关机后重启并在重启后重新登录所有注册用户、/sg 关机并在下次启动时重新登录、/a 取消已经排队但还没执行的重启(必须和 /t 一起用过、且要在倒计时结束前敲)、/p 立即关机不外带超时、/h 休眠、/hybrid 关机并为快速启动做准备、/f 强制关闭正在运行的程序(不提醒保存)、/m \<computername> 指定远程目标、/t <xxx> 设置倒计时秒数、/c "<comment>" 写明重启原因、/o 重启进入高级启动选项菜单。

msiexec 的显示选项决定了安装过程弹不弹界面:/quiet 完全无交互、/passive 只显示进度条、/qn 无 UI、/qb 基础 UI、/qr 精简 UI,末尾带 + 的(/qn+、/qb+)表示结束时会多一个对话框。批量静默安装一般是 msiexec /i "C:\example.msi" /qn。

rundll32 有个容易误解的点,官方 Remarks 明确写了:Rundll32 只能调用专门按 Rundll32 规范编写的 DLL 里的函数,它不是「随便哪个 DLL 都能拿来跑」的通用加载器。

verifier 是驱动验证工具,常用的是 verifier /query 看当前验证了哪些驱动、verifier /querysettings 看设置、verifier /reset 关掉全部验证设置。它的 bootmode 有三种持久化方式:persistent(默认,跨多次重启一直生效)、disableafterfail(Windows 启动失败后自动关闭验证)、oneboot(只对下一次启动生效)。开着驱动验证会让系统明显变慢,而且在 D 状态排查现场之外不要长期开着——按官方给的这三种模式选择你自己的持续时间。

八、一条命令把现场信息抓下来

排查问题时最省事的是先跑一次「现场快照」。下面两个脚本都是只读的:只调用 systeminfo、tasklist、sc query、schtasks /query 这类查看命令,不修改任何设置,结果在桌面上生成一份 txt。

PowerShell 版(存成 win-cmd-check-2.ps1):

# Windows 命令详解(二)自检脚本:只读采集,不做任何修改
$log = Join-Path ([Environment]::GetFolderPath('Desktop')) 'win-cmd-check-2.txt'

Set-Content -Path $log -Value 'Windows 现场快照(二):系统信息、进程与服务'
Add-Content -Path $log -Value ('生成时间:' + (Get-Date).ToString('yyyy-MM-dd HH:mm:ss'))

function Run([string]$title, [string]$cmd) {
    Add-Content -Path $log -Value ''
    Add-Content -Path $log -Value ('===== ' + $title + ' =====')
    cmd /c $cmd 2>&1 | Add-Content -Path $log
}

Run '系统版本'        'ver'
Run '计算机名'        'hostname'
Run '当前用户与特权'  'whoami /groups'
Run '系统概要'        'systeminfo'
Run '进程清单'        'tasklist /fo csv'
Run '服务清单(前 40 行)' 'sc query type= service state= all'
Run '计划任务(前 40 行)' 'schtasks /query /fo LIST'
Run '驱动清单'        'driverquery /fo csv /nh'

Write-Host ('报告已写入:' + $log)

批处理版(存成 win-cmd-check-2.bat):

几点使用说明:systeminfo 在机械硬盘的老机器上要跑十几秒到几十秒,属正常;whoami /groups 和 sc query ... state= all 需要管理员权限的命令行才能看全,普通窗口跑出来会少一部分;把这份 txt 发出去求助之前先自己扫一眼,里面有计算机名、用户名、已安装更新列表这类信息。

九、这个系列的其它几篇

十、出处

下列页面均属于微软官方 Windows Commands 参考(https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/):

systeminfo、hostname、whoami、ver、wmic、driverquery、tasklist、taskkill、tskill、query-process、sc-query、sc-config、sc-create、sc-delete、query-user、query-session、quser、qwinsta、logoff、schtasks 与它的子页 schtasks-create、schtasks-query、schtasks-change、schtasks-delete、schtasks-run、schtasks-end,以及 at、reg-query、reg-add、reg-delete、reg-export、reg-import、reg-copy、reg-compare、gpresult、gpupdate、shutdown、msiexec、rundll32、verifier。

几条重点页面的完整地址: