共有八个核心服务 cmdlet,它们是为众多的服务任务设计的。我们的讨论内容将只限于列出和更改服务运行状态,但您可以使用 Get-Help *-Service 获取服务 cmdlet 的列表,还可使用 Get-Help <Cmdlet 名称>(例如 Get-Help New-Service)查找有关每个服务 cmdlet 的信息。

获取服务

可以使用 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

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

Get-Service -ComputerName Server01

获取所需服务和依赖服务

Get-Service cmdlet 有两个参数在服务管理中非常有用。DependentServices 参数可获取依赖于某个服务的服务。RequiredServices 参数可获取此服务所依赖的服务。

这些参数只能显示 Get-Service 返回的 System.ServiceProcess.ServiceController 对象的 DependentServices 和 ServicesDependedOn(别名=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

以下命令会获取需要 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 {$_.RequiredServices -or $_.DependentServices} | Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

停止、启动、挂起和重新启动服务

这些服务 cmdlet 都有相同的常规形式。这些服务可以按照公用名或显示名称指定,其取值可以是列表和通配符。若要停止后台打印程序,请使用:

Stop-Service -Name spooler

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

Start-Service -Name spooler

若要挂起后台打印程序,请使用:

Suspend-Service -Name spooler

Restart-Service cmdlet 的工作方式与其他服务 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>

您将注意到,系统会显示有关后台打印程序正在启动的重复警告消息。在执行需要占用一定时间的服务操作时,Windows 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 : Cannot 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...

这些服务 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,请使用“以管理员身份运行”选项打开 Windows PowerShell。

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

另请参阅




目录