共有八个核心服务 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
另请参阅