管理服务

本示例仅适用于 Windows PowerShell 5.1。

有八个专为各种服务任务设计的核心 Service cmdlet。 本文只讨论列出和更改服务的运行状态。 可以使用 Get-Command *-Service 获取 Service cmdlet 的列表。 可以使用 Get-Help <Cmdlet-Name> 查找有关每个 cmdlet 的信息,例如 Get-Help New-Service

获取服务

可以通过使用 Get-Service cmdlet 获取本地或远程计算机上的服务。 与使用 Get-Process 相同,使用不带参数的 Get-Service 命令将返回所有服务。 你可以按名称进行筛选,甚至可以使用星号作为通配符:

PS> Get-Service -Name se*

Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

因为服务的真实名称并不总是可见,你可能会发现你需要按显示名称查找服务。 可以按特定名称(使用通配符或提供显示名称的列表)进行搜索:

PS> Get-Service -DisplayName se*

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center

PS> Get-Service -DisplayName ServiceLayer, Server

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

获取远程服务

通过 Windows PowerShell,可以使用 Get-Service cmdlet 的 ComputerName 参数获取远程计算机上的服务。 ComputerName 参数接受多个值和通配符,因此你可以使用单个命令获取多台计算机上的服务。 例如,下面的命令获取 Server01 远程计算机上的服务。

Get-Service -ComputerName Server01

从 PowerShell 6.0 开始,*-Service cmdlet 不具有 ComputerName 参数。 仍可使用 PowerShell 远程处理获取远程计算机上的服务。 例如,下面的命令获取 Server02 远程计算机上的服务。

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

还可使用其他 *-Service cmdlet 管理服务。 有关 PowerShell 远程处理的详细信息,请参阅 about_Remote

获取必需和从属服务

Get-Service cmdlet 具有两个在服务管理中非常有用的参数。 DependentServices 参数获取依赖于该服务的服务。

RequiredServices 参数获取 LanmanWorkstation 服务所依赖的服务。

PS> Get-Service -Name LanmanWorkstation -RequiredServices

Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

DependentServices 参数获取需要 LanmanWorkstation 服务的服务。

PS> Get-Service -Name LanmanWorkstation -DependentServices

Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

以下命令获取具有依赖项的所有服务。 Format-Table cmdlet 用于显示服务的 Status、Name、RequiredServices 和 DependentServices 属性。

Get-Service -Name * | Where-Object {$_.RequiredServices -or $_.DependentServices} |
  Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

停止、启动、暂停和重启服务

所有 Service cmdlet 都具有相同的一般形式。 可以按公用名或显示名称指定服务,并使用列表和通配符作为值。 若要停止打印后台处理程序,请使用:

Stop-Service -Name spooler

若要在打印后台处理程序停止后启动它,请使用:

Start-Service -Name spooler

若要暂停打印后台处理程序,请使用:

Suspend-Service -Name spooler

Restart-Service cmdlet 的工作方式与其他 Service cmdlet 相同:

PS> Restart-Service -Name spooler

WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

请注意,你将收到有关打印后台处理程序启动的重复警告消息。 当你执行需要耗费一些时间的服务操作时,PowerShell 将通知你它仍在尝试执行该任务。

如果想要重启多个服务,则可获取服务列表,并对其进行筛选,然后执行重启操作:

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service

WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

虽然这些 Service cmdlet 没有 ComputerName 参数,但是你可通过使用 Invoke-Command cmdlet 在远程计算机上运行它们。 例如,下面的命令在 Server01 远程计算机上重启后台打印程序服务。

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

设置服务属性

Set-Service cmdlet 更改本地或远程计算机上服务的属性。 因为服务状态是一种属性,所以你可以使用此 cmdlet 来启动、停止和暂停服务。 Set-Service cmdlet 还有一个 StartupType 参数,可让你更改服务启动类型。

若要在 Windows Vista 和 Windows 的更高版本上使用 Set-Service,请使用“以管理员身份运行”选项打开 PowerShell。

有关详细信息,请参阅 Set-Service

请参阅