如何使用PowerShell管理Windows服务

日期: 2016-03-13 作者:Adam Bertram翻译:邹雅玲 来源:TechTarget中国 英文

作为一名系统管理员,最常见的任务之一就是学会管理Windows服务,这是保证Windows服务器和客户端正常运行的重要内容。 许多操作系统和应用程序都依赖于这些服务。 Microsoft Management Console窗口是我们非常熟悉的一款Windows服务,通过该服务,管理员可以在本地或者远程计算机上操控服务。但是,一时间还不能改变几十台甚至几百台机器。

此时,PowerShell就派上用场了。 PowerShell应用几个本地Cmdlet来管理Windows服务。 Get-Command * Service* -Module Microsoft.PowerShell.Managem……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作为一名系统管理员,最常见的任务之一就是学会管理Windows服务,这是保证Windows服务器和客户端正常运行的重要内容。

许多操作系统和应用程序都依赖于这些服务。

Microsoft Management Console窗口是我们非常熟悉的一款Windows服务,通过该服务,管理员可以在本地或者远程计算机上操控服务。但是,一时间还不能改变几十台甚至几百台机器。

此时,PowerShell就派上用场了。

PowerShell应用几个本地Cmdlet来管理Windows服务。

Get-Command * Service* -Module Microsoft.PowerShell.Management

图1. 几个本地Cmdlets管理员可以使用该命令管理Windows服务

图1. 几个本地Cmdlets管理员可以使用该命令管理Windows服务

这些Cmdlets可以在任何一个服务上执行许多命令。

Get-Service是一种非常常见的Cmdlets。最基础的层面,无需任何参数,Get-Service便可以在本地计算机上显示所有服务,但是,大多数管理员需要通过远程计算机来查询服务。使用ComputerName参数便可以满足以上需求。

Get-Service –ComputerName CLIENT1

图2. 没有使用任何参数,Get-Service Cmdlets在一台本地计算机上显示了一些服务内容

图2. 没有使用任何参数,Get-Service Cmdlets在一台本地计算机上显示了一些服务内容

使用Get-Service可以显示出远程客户端上所有服务内容。

如何处理服务设备

如果你想要查看多个计算机上的服务怎么办?也许,你曾将收到过许多一系列文本形式的计算机名称,这些计算机名称通过以下几种途径得到的:Active Directory、一些业务应用程序、客户管理系统以及定制数据库。PowerShell中有一款叫做Get-Content 的Cmdlet,通过使用Foreach循环方法,它可以读取每一个计算机名称。这样,我们运行Get- Service就可以获取到这些计算机名称了。

Get-Content C:Computers.txt | foreach {Get-Service –ComputerName $_}

使用PowerShell更改计算机服务

让我们一起对这些服务进行一些深入研究,并做出一些更改。通常的做法是,如果运行出错或者应用发生变化,那么就需要重新启动服务。例如,我们曾重启过列表中所陈列的计算机上Application Layer Gateway(简称ALG)服务。指定用于查找的特定服务,然后,将该服务引入 Restart-Service中,实现这种操作问题不大。

Get-Content C:Computers.txt | foreach {Get-Service –ComputerName $_ -Name ALG | Restart-Service }

如果服务出现停止运行的情况,Restart-Service将会自动重启该服务。

Set-Service Cmdlet进一步掌控Windows服务

Set-Service是另外一种Cmdlet,对Windows服务许多属性进行了更改,例如,服务启动模式的配置方式。我们可以这样定义,当操作系统启动时,无论服务是否启动都可以手动启动或者禁用。Set-Service中有一个StartupType参数,可以更改其属性。

下面的这段命令语句设置了ALG服务的启动类型,使其无法在计算机C盘.txt文件中运行。

Get-Content C:Computers.txt | foreach {Get-Service –ComputerName $_ -Name ALG | Set-Service –StartupType Disabled }

合并PowerShell和WMI获取更多功能

如下有几个错误的服务命令,这些命令既没有提供足够的信息,也没有成功的修改目标属性。我们可以使用 Windows Management Instrumentation (简称WMI)解决以上问题。WMI中包含Win32_Service,可以通过使用Get-CimInstance或者Get-WmiObject实现调用操作。

Get-CimInstance –ComputerName client1 –ClassName Win32_Service

图3. 集合使用PowerShell和WMI Win32_Service可以获取到计算机上更多关于Windows服务的信息

图3. 集合使用PowerShell和WMI Win32_Service可以获取到计算机上更多关于Windows服务的信息

当管理员想要通过WMI查询服务时,使用带星号标记的Property参数,就可以获取到更多关于服务的信息了。

Get-CimInstance –ComputerName CLIENT1 –ClassName Win32_Service –Property *

图4. Win32_Service中的Property参数可以提供更多关于Windows服务的细节信息

图4. Win32_Service中的Property参数可以提供更多关于Windows服务的细节信息

深入细节

要想更深入研究错误的服务命令,你可以参考WMI服务实例对象。

Get-WmiObject –ComputerName CLIENT1 –Class Win32_Service | Get-Member –MemberType Method

图5. WMI服务实例对象使用的测试方法

图5. WMI服务实例对象使用的测试方法

利用调用技术,可以在服务对象中执行以上这些方法。

Get-WmiObject –ComputerName CLIENT1 –Class Win32_Service –Filter "Name='ALG'" | foreach {$_.StopService()}

通过以上的例子可以看出来,我通过使用Filter参数就可以将ALG服务单独选择出来。我将该服务连接到ForEach-Object中,并调用StopService,反过来,可以停止服务运行。

作者

Adam Bertram
Adam Bertram

自由撰稿人

相关推荐