PowerShell远程管理Windows服务需先启用WinRM并配置可信主机,再用Get-Service(5.1版)或Invoke-Command(6+版)查询状态,通过Invoke-Command执行启停、重启及依赖关系诊断。
powershell 远程管理 windows 服务状态,核心在于结合 winrm 通信能力与服务管理命令,既可单台精准操作,也能批量统一控制。关键不在于图形界面,而在于命令是否在目标机器上下文中执行。
先确保远程通道通了
服务状态操作的前提是 PowerShell 远程连接可用:
- 目标服务器(如 192.168.1.50)已运行
Enable-PSRemoting -Force,WinRM 服务启动且监听器就绪(winrm enumerate winrm/config/listener应有输出) - 本地客户端已将目标地址加入可信主机:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.50" -Force - 防火墙放行 TCP 5985(HTTP)或 5986(HTTPS),非域环境建议用 HTTPS+证书更稳妥
直接查远程服务状态
无需进入交互会话,一条命令即可获取结果:
- 查单台:
Get-Service -ComputerName 192.168.1.50 -Name wuauserv(查 Windows Update 服务) - 查多台(同一命令):
Get-Service -ComputerName Server01,Server02 -Name BITS - 按显示名模糊查:
Invoke-Command -ComputerName 192.168.1.50 -ScriptBlock { Get-Service -DisplayName "*logon*" }
注意:PowerShell 6+ 已移除 -ComputerName 参数,必须用 Invoke-Command 包裹 Get-Service 才能跨版本兼容。
启停/重启远程服务
使用 Start-Service、Stop-Service、Restart-Service 等命令时,不能直接加 -ComputerName(6+ 版本),必须通过远程会话或脚本块执行:
- 单次操作(推荐):
Invoke-Command -ComputerName 192.168.1.50 -ScriptBlock { Restart-Service -Name spooler -Force } - 带凭据:
Invoke-Command -ComputerName 192.168.1.50 -Credential (Get-Credential) -ScriptBlock { Stop-Service -Name dhcp } - 批量多台同时重启:
"Server01","Server02" | ForEach-Object { Invoke-Command -ComputerName $_ -ScriptBlock { Restart-Service -Name WinRM } }
查依赖与从属关系
服务不是孤立的,远程诊断常需上下文:
- 查某服务依赖哪些其他服务:
Invoke-Command -ComputerName 192.168.1.50 -ScriptBlock { (Get-Service -Name LanmanServer).RequiredServices } - 查哪些服务依赖它:
Invoke-Command -ComputerName 192.168.1.50 -ScriptBlock { (Get-Service -Name LanmanServer).DependentServices } - 组合使用可快速定位启动失败根因,比如
Server服务无法启动,可能因Workstation或NetLogon未运行


















