Windows 服务管理常用命令:sc、Get-Service 和 Restart-Service 怎么用
Windows 服务管理常用命令:sc、Get-Service 和 Restart-Service 怎么用
在 Windows 上排查网络、虚拟机、SSH、数据库这类问题时,经常会碰到一句话:
先看一下服务有没有起来。
如果人在图形界面前,打开“服务”管理器当然可以。但如果你是通过 SSH 连到一台 Windows 机器,或者手边只有 CMD / PowerShell,命令行会更省事。
这篇只整理服务管理相关的常用命令。
先判断你现在在哪个 Shell
Windows 上常见两种提示符:
1 | C:\Users\xxx> |
这种一般是 CMD。
1 | PS C:\Users\xxx> |
这种一般是 PowerShell。
两个环境都能管理服务,但命令不一样:
- CMD 里主要用
sc - PowerShell 里主要用
Get-Service、Start-Service、Stop-Service、Restart-Service
CMD 下查看服务:sc query
查看所有服务:
1 | sc query |
只查看正在运行的服务:
1 | sc query state= running |
查看某个指定服务:
1 | sc query 服务名 |
例如查看 OpenSSH 服务:
1 | sc query sshd |
如果服务名里有空格,一定要加引号。
例如 VMware NAT 服务:
1 | sc query "VMware NAT Service" |
不要写成:
1 | sc query VMware NAT Service |
这种写法会把后面的单词拆成多个参数,很容易报:
1 | 错误: 无效选项 |
查看更详细的信息:sc queryex
sc query 只能看到基本状态。如果想看更多信息,可以用 sc queryex:
1 | sc queryex "VMware NAT Service" |
它通常会比 sc query 多出一些字段,比如 PID。
排查“服务虽然显示运行,但实际进程是不是还在”这类问题时,queryex 更有用。
查看服务配置:sc qc
如果想看服务的启动类型、执行路径、依赖关系,可以用:
1 | sc qc "VMware NAT Service" |
常见用途:
- 看服务启动类型
- 看服务对应的可执行文件路径
- 看服务依赖哪些组件
- 判断服务配置是否被改过
这里的 qc 可以理解成 query config。
CMD 下启动、停止和重启服务
停止服务:
1 | sc stop "VMware NAT Service" |
启动服务:
1 | sc start "VMware NAT Service" |
如果你只是想快速重启,可以合成一条:
1 | sc stop "VMware NAT Service" && sc start "VMware NAT Service" |
这条命令的意思是:
- 先执行
sc stop - 如果停止命令执行成功,再执行
sc start
有些服务停止需要几秒钟。如果刚停完立刻启动失败,可以等一下,再单独执行:
1 | sc start "VMware NAT Service" |
重启后建议再确认状态:
1 | sc query "VMware NAT Service" |
如果看到 STATE 是 RUNNING,一般就说明服务已经启动。
PowerShell 下查看服务:Get-Service
PowerShell 里查看服务更直观:
1 | Get-Service |
只看正在运行的服务:
1 | Get-Service | Where-Object {$_.Status -eq 'Running'} |
查看指定服务:
1 | Get-Service sshd |
如果想让输出更适合阅读:
1 | Get-Service | Format-Table -AutoSize |
也可以组合一下,只看正在运行的服务并格式化:
1 | Get-Service | Where-Object {$_.Status -eq 'Running'} | Format-Table -AutoSize |
PowerShell 下启动、停止和重启服务
停止服务:
1 | Stop-Service "VMware NAT Service" |
启动服务:
1 | Start-Service "VMware NAT Service" |
重启服务:
1 | Restart-Service "VMware NAT Service" |
如果是 OpenSSH 服务,可以这样重启:
1 | Restart-Service sshd |
PowerShell 的好处是命令语义更清楚。看到 Restart-Service 基本就知道它在干什么。
常见问题
1. 服务名和显示名是不是一回事?
不一定。
Windows 服务通常有:
- 服务名
- 显示名
很多时候两者一样,但也可能不同。sc query 输出里一般能看到:
1 | SERVICE_NAME: VMware NAT Service |
如果两者不同,命令里优先使用 SERVICE_NAME。
2. 服务名有空格怎么办?
加引号。
1 | sc query "VMware NAT Service" |
1 | Restart-Service "VMware NAT Service" |
这是最容易踩的坑。只要服务名里有空格,就别省引号。
3. 提示拒绝访问怎么办?
服务管理通常需要管理员权限。
如果你是在 SSH 里操作 Windows 服务,当前 SSH 用户也需要有足够权限。否则执行 stop、start、restart 时可能会失败。
可以先确认当前账号是否具备管理员权限,再执行服务管理命令。
4. CMD 能不能切到 PowerShell?
可以。在 CMD 里直接输入:
1 | powershell |
回车后就会进入 Windows PowerShell。
如果机器装了 PowerShell 7,也可以尝试:
1 | pwsh |
常用命令速查
CMD:
1 | sc query |
PowerShell:
1 | Get-Service |
小结
如果你在 CMD 里,优先记住:
1 | sc query "服务名" |
如果你在 PowerShell 里,优先记住:
1 | Get-Service |
排查 Windows 服务问题时,先查状态,再看配置,最后再重启。别一上来就重启,至少先知道服务当前到底是什么状态。




