代码改变世界

Windows PowerShell 2.0之服务管理

2010-12-19 02:38 by @天行健中国元素, ... 阅读, ... 评论, 收藏, 编辑

当操作服务时,PowerShell传递System.ServiceProcess.ServiceController对象,获取一个或多个对象的简单方法是使用Get-Service cmdlet。当不带参数调用时会返回当前系统中注册的所有服务,这样即可用这个cmdlet生成快速报告。下例获取当前运行的所有服务:

PS C:\PowerShell> Get-Service | where {$_.Status -eq "Running"}

Status Name DisplayName

------ ---- -----------

Running ALG Application Layer Gateway Service

Running AudioSrv Windows Audio

Running BITS Background Intelligent Transfer Ser...

Running Browser Computer Browser

Running btwdins Bluetooth Service

Running CryptSvc Cryptographic Services

Running DcomLaunch DCOM Server Process Launcher

Running Dhcp DHCP Client

Running dmserver Logical Disk Manager

Running Dnscache DNS Client

Running Eventlog Event Log

Running EventSystem COM+ Event System

Running FastUserSwitchi... Fast User Switching Compatibility

Running HidServ HID Input Service

…….

可以通过服务名通配符来查询,下例通过服务名类似DNS*的通配符查询DNS client服务:

PS C:\PowerShell> Get-Service DNS*

Status Name DisplayName

------ ---- -----------

Running Dnscache DNS Client

需要查找相关服务时,在查询的服务名称中使用通配符也很有效,相关服务通常有相似的名称。下例通过获取所有匹配*net*通配符获取Windows下与网络相关的服务:

PS C:\PowerShell> Get-Service *net*

Status Name DisplayName

------ ---- -----------

Stopped aspnet_state ASP.NET State Service

Stopped NetDDE Network DDE

Stopped NetDDEdsdm Network DDE DSDM

Stopped Netlogon Net Logon

Running Netman Network Connections

Stopped VMnetDHCP VMware DHCP Service

【注意】

通配符应用于服务名,而不是显示名。这就是为什么使用*net*这种形式的通配符获取的服务中仅是名称中显示包含net字样服务的一部分,即部分以net为服务显示名的服务的真实名称并不以net开头。

1 改变服务状态

Windows提供的控制台工具net.exe可以启动和停止服务。由于这个程序中包含很多功能,过于复杂,而不利于PowerShell各部分松耦合的要求。例如,能够添加和移除共享驱动器。PowerShell提供了内置cmdlet用来改变服务状态,如启动、停止、挂起和恢复服务,所有的命令均直接调用。启动服务使用Start-Service:

PS C:\> Start-Service W32Time

也可以通过调用ServiceControler的Start方法来启动服务:

PS C:\> (Get-Service W32Time).Start()

需要强调的是改变服务状态需要管理员权限。

停止服务可以使用Stop-Service:

PS C:\> Stop-Service W32Time

也可使用Stop方法停止服务:

PS C:\> (Get-Service W32Time).stop()

其他改变服务状态操作的cmdlet如Restart-Service、Suspend-Service和Resume-Service与上类似。

【说明】

改变服务会影响系统的整体运行,所以需要管理员权限。如果运行Windows Vista及其以上版本的操作系统,务必要在高级权限的Shell中执行操作。

2 改变服务的属性

PowerShell提供了cmdlet Set-Service允许用户改变服务的任何属性,包括服务名和描述。但这是比较危险的操作,执行时应格外小心,因为更改服务名后可忘记服务到底是哪一个。Set-Service可以改变服务启动方式,下例将W32Time服务的启动方式改变为Disabled:

PS C:\> Set-Service W32Time –StartupType Disabled

在每次启动时自动运行某个服务的方式是将其启动类型改为Automatic,如:

PS C:\> Set-Service W32Time –StartupType Automatic

需要强调的是因涉及系统的稳定运行,所以在启动、关闭或者改变服务的启动方式时一定要谨慎。有些服务是Windows操作系统正常运行所必需的,停止或禁用这些服务将会引起系统某些功能停止。

3 分析服务的依赖性

一些服务的运行经常会依赖于其他服务,服务管理控制台管理单元显示这些依赖关系。如果需要在PowerShell进程或脚本中获取这些信息,则可以读取ServiceControler、DependentServices和ServicesDependedOn属性,它们分别用于返回当前服务依赖的服务和依赖当前服务的所有服务,如:

PS C:\> (Get-Service winmgmt).DependentServices

Status Name DisplayName

------ ---- -----------

Running wscsvc Security Center

Running SharedAccess Windows Firewall/Internet Connectio...

PS C:\> (Get-Service winmgmt).ServicesDependedOn

Status Name DisplayName

------ ---- -----------

Running RPCSS Remote Procedure Call (RPC)

其中显示WMI服务依赖于Remote Procedure Call服务,同时Security Center和Windows Firewall/Internet Connection服务依赖于它。

4 总 结

进程在操作系统中用于处理数据和进程间的交换,PowerShell的进程和服务管理机制能分析进程信息,并且直接操作进程实例指向的对象。本文讲述了如何使用PowerShell统一访问服务的方法并创建在PowerShell中操作服务的环境,这是系统管理自动化的重要步骤。

 

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/