当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用PowerShell管理Windows服务?

作者:精品下载站 日期:2024-12-14 20:10:58 浏览:14 分类:玩电脑

如何使用PowerShell管理Windows服务?


您不仅可以通过 services.msc 管理单元或 sc.exe 命令行工具管理 Windows 服务,还可以使用 PowerShell。在本文中,我们将考虑使用 PowerShell 管理 Windows 服务的不同场景。

用于管理 Windows 服务的 PowerShell Cmdlet

有八个基本服务 cmdlet 可用于查看 Windows 服务的状态并管理它们。要获取服务管理 cmdlet 的完整列表,请运行以下命令:

Get-Help \*-Service

[玩转系统] 如何使用PowerShell管理Windows服务?

  • Get-Service — 允许获取本地或远程计算机上处于运行或停止状态的服务;

  • New-Service - 创建服务。该 cmdlet 在注册表和服务数据库中为 Windows 服务创建一个新条目;

  • Restart-Service - 重新启动服务。该cmdlet通过Windows服务控制器发送重启消息;

  • Resume-Service - 恢复服务。该 cmdlet 向 Windows 服务管理器发送恢复消息;

  • Set-Service — 更改本地或远程服务的设置,包括其状态、描述、显示名称或启动模式。您还可以使用此 cmdlet 来启动、停止或暂停服务;

  • Start-Service - 启动服务;

  • Stop-Service - 停止服务(cmdlet 向 Windows 服务管理器发送停止消息);

  • 暂停服务 - 暂停服务。挂起的服务仍在运行,但在使用(例如,使用 Resume-Service cmdlet)恢复之前它不会执行任何操作。

您可以通过 Get-Help 获取使用特定 cmdlet 的详细说明和示例:

Get-Help Start-Service

[玩转系统] 如何使用PowerShell管理Windows服务?

如何使用 Get-Service 检查 Windows 服务状态?

您可以使用 Get-Service cmdlet 获取本地或远程计算机上的服务列表及其状态(正在运行/已停止)。 -Name 参数允许按名称选择服务。可以使用通配符指定服务名称

*

[玩转系统] 如何使用PowerShell管理Windows服务?

如果您不知道确切的服务名称,可以使用 -DisplayName 参数通过显示的名称找到它。您可以使用值和通配符列表。

[玩转系统] 如何使用PowerShell管理Windows服务?

使用带有 -ComputerName 参数的 Get-Service cmdlet 来获取远程计算机上的服务状态。您可以通过指定以逗号分隔的名称来同时查询多台远程计算机上的服务状态。例如,下面显示的命令获取远程计算机 ny-prnt1 和 ny-prnt2 上的 Spooler 服务状态。

Get-Service spooler -ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped spooler Print Spooler

要显示服务的所有属性,请使用 Select-Object cmdlet:

Get-Service spooler | Select-Object *

[玩转系统] 如何使用PowerShell管理Windows服务?

Select-Object cmdlet 允许获取服务的特定属性。例如,您要查看 Spooler 服务的名称、状态和可用选项:

Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

[玩转系统] 如何使用PowerShell管理Windows服务?

Get-Service cmdlet 有两个参数可让您查看服务依赖关系:

  • -DependentServices 允许显示依赖于给定服务的服务

  • -RequiredServices 显示给定服务所依赖的服务

以下命令显示启动 Spooler 服务所需的服务:

Get-Service -Name Spooler -RequiredServices

[玩转系统] 如何使用PowerShell管理Windows服务?

以下命令显示依赖于 Spooler 的服务:

Get-Service -Name Spooler -DependentServices

[玩转系统] 如何使用PowerShell管理Windows服务?

如果您想要查找具有特定状态或参数的服务,请使用 Where-Object cmdlet。例如,让我们获取正在运行的服务列表:

Get-Service | Where-Object {$_.status -eq 'running'}

[玩转系统] 如何使用PowerShell管理Windows服务?

要显示手动启动类型的服务,请运行以下命令:

Get-Service | Where-Object {$_.starttype -eq 'Manual'}

[玩转系统] 如何使用PowerShell管理Windows服务?

使用以下 PowerShell 脚本检查当前计算机上是否存在特定的 Windows 服务:

if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}

如何使用 PowerShell 停止、启动或重新启动服务?

您可以使用Stop-Service cmdlet 停止服务。要停止后台处理程序,请运行以下命令:

Stop-Service -Name spooler

Stop-Service cmdlet 执行后不会显示任何内容。要查看结果,请使用-PassThru 参数。

[玩转系统] 如何使用PowerShell管理Windows服务?

请注意,并非所有服务都可以停止。如果有任何依赖服务,您将看到错误:

Cannot stop service because it has dependent services. It can only be stopped if force flag set.

[玩转系统] 如何使用PowerShell管理Windows服务?

要强制停止服务,请使用-Force 参数。您应该记住,所有依赖服务也将停止:

Stop-Service samss -Force -Passthru

如果指定的服务(位、假脱机程序)处于“正在运行”状态,以下命令将停止它们:

get-service bits,spooler | where {$_.status -eq 'running'} | stop-service -passthru

[玩转系统] 如何使用PowerShell管理Windows服务?

有时服务会挂在“Stopping”状态,必须强行终止。

Start-Service cmdlet 启动已停止的服务:

Start-Service -Name spooler -PassThru

[玩转系统] 如何使用PowerShell管理Windows服务?

如果某个服务的任何依赖服务停止,则该服务将不会启动。要查找并启动它们,请使用以下 PowerShell 语句:

get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

[玩转系统] 如何使用PowerShell管理Windows服务?

如果服务支持此状态,Suspend-Servce cmdlet 可以暂停服务。要了解是否可以暂停服务,请使用带有 CanPauseAndContinue 属性的 Get-Service cmdlet。

Get-Service samss | Format-List name, canpauseandcontinue

[玩转系统] 如何使用PowerShell管理Windows服务?

要显示可能暂停的所有服务的列表,请运行以下命令:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

[玩转系统] 如何使用PowerShell管理Windows服务?

让我们暂停 SQLBrowser 服务:

Suspend-Service -Name SQLBrowser

[玩转系统] 如何使用PowerShell管理Windows服务?

要恢复暂停的服务,请使用 Resume-Service cmdlet:

Resume-Service -Name SQLBrowser

[玩转系统] 如何使用PowerShell管理Windows服务?

以下命令将恢复所有暂停的服务:

get-service | where-object {$_.Status -eq "Paused"} | resume-service

Restart-Service cmdlet 将重新启动服务:

Restart-Service -Name spooler

[玩转系统] 如何使用PowerShell管理Windows服务?

此命令启动计算机上所有已停止的网络服务:

get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service

这些命令没有 -ComputerName 参数,但您可以使用 Invoke-Command cmdlet 或管道在远程计算机上运行它们。

例如,要重新启动远程计算机 ny-prnt1 上的打印后台处理程序,请运行以下命令:

Get-Service Spooler -ComputerName ny-prnt1 | Start-Service

默认情况下,只有管理员可以启动/停止 Windows 服务,但您可以授予非管理员用户对特定服务的启动/停止/重新启动权限。

使用 Set-Service 更改服务设置

Set-Service cmdlet 允许您更改本地或远程计算机上服务的任何参数或设置。由于服务的状态是一个属性,因此您可以使用此 cmdlet 来启动、停止或挂起服务。 Set-Service 具有-StartupType 参数,允许更改服务的启动类型。

让我们将 Spooler 启动类型更改为自动:

Set-Service spooler -startuptype automatic -passthru

[玩转系统] 如何使用PowerShell管理Windows服务?

您可以设置手动启动类型:

Set-Service spooler -startuptype manual -passthru

[玩转系统] 如何使用PowerShell管理Windows服务?

如何通过PowerShell创建或删除Windows服务?

New-Service - 是用于在 Windows 中创建新服务的 cmdlet。指定新服务的名称和可执行文件(您甚至可以将 PowerShell 脚本作为 Windows 服务运行)。

让我们创建一个名为 TestSvc 的新服务:

new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

[玩转系统] 如何使用PowerShell管理Windows服务?

使用 Get-WmiObject cmdlet 获取有关服务的启动类型和描述的信息。

get-wmiobject win32_service -filter "name='testservice'"

[玩转系统] 如何使用PowerShell管理Windows服务?

您可以使用以下命令更改新服务的设置:

Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual

[玩转系统] 如何使用PowerShell管理Windows服务?

要删除服务,请运行以下命令:

(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()

更改运行 Windows 服务的用户帐户

您可以使用 PowerShell 更改用于启动服务的用户帐户。获取用于启动 TestSvc 的帐户名称:

get-wmiobject win32_service -filter "name='TestSvc'" | Select name,startname

[玩转系统] 如何使用PowerShell管理Windows服务?

要更改 Windows 服务的用户名和密码,请运行以下命令:

$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")

将显示 Change() 方法参数的列表。计算 StartName 和 StartPassword 参数的位置:它们分别位于第 20 和 21st 位置。

[玩转系统] 如何使用PowerShell管理Windows服务?

$svc | Invoke-WmiMethod -Name Change -ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")

或者您可以输入 gMSA 帐户的名称(本例中不指定帐户密码)。

如您所见,PowerShell 可以轻松管理 Windows 服务。您可以创建、停止、启动或恢复服务,以及更改其属性。大多数 cmdlet 允许管理远程计算机上的服务。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯