Windows PowerShell不一样的系统管理体验

系统维护、管理中大家常在命令提示符(cmd exe)下进行操作,对Windows PowerShell鲜有接触或者使用。其实在微软的计划中,Windows Po

  系统维护、管理中大家常在命令提示符(cmd.exe)下进行操作,对Windows PowerShell鲜有接触或者使用。其实在微软的计划中,Windows PowerShell将成为CDM的继任者,是下一代命令行工具。Windows PowerShell目前最高版本为2.0,并且已经集成到Windows Server 2008及Windows 7中。Windows PowerShell使得IT管理员更容易地控制系统管理和加速自动化,作为系统管理员应该掌握和使用它。笔者因为工作需要开始学习Windows PowerShell,下面和大家分享几个非常实用的Windows PowerShell应用实例。

  1、Windows PowerShell的安装

  在Windows Server 2008中已经集成了Windows PowerShell,不过默认情况下并没有安装,大家可以在服务管理器中进行安装而不用从网上下载。对于Windows 7的用户系统已经默认安装了Windows PowerShell 2.0,直接使用就可以了。对于其他版本的Windows用户可以微软的网站http://www.microsoft.com/downloads/details.aspx?FamilyID=60deac2b-975b-41e6-9fa0-c2fd6aa6bc89&DisplayLang=en下载。

  2、善用Windows PowerShell帮助

  Windows PowerShell是新的命令和脚本规范,初学者会有一定的陌生感不容易上手。其实,善用Windows PowerShell帮助可以帮助大家尽快了解其命令规范。

  运行Windows PowerShell,输入并执行“get-command”会返回Windows PowerShell提供的129个命令的信息,这些命令囊括了管理服务、进程、事件日志、证书、注册表以及使用 Windows Management Instrumentation (WMI)等系统管理的方方面面。如果要获取其中的某个命令的使用帮助信息,比如我们要获取“get-command”这个命令的使用帮助,可以执行命令“get-help get-command”,获取其他命令的帮助信息的方法类似。(图1)

  Windows PowerShell不一样的系统管理体验

  图1 Windows Powershell

  另外,为大家提供几个很实用的技巧。如果命令的帮助信息比较多,一屏呈不下可用通道符号“|”进行分屏显示,例如“get-command | more”将逐屏显示Windows PowerShell所有的程序集。“get-help get-service -full”将会显示get-service这一程序集的详细帮助(包括示例)。“get-help get-service –parameter *”将会列出Get-Service程序集的所有参数及参数说明。“help get-service –parameter *”作用和前面一个命令一样,但是将会逐屏显示。有时基于需要我们还需要使用通配符,Windows PowerShell中的通配符使用与CMD有区别,可以执行命令“get-help about_wildcard”获取通配符使用的帮助信息。(图2)

  Windows PowerShell不一样的系统管理体验

  图2 Windows Powershell

#p#

  3、活用别名提升操作效率

  Windows PowerShell中的命令虽然可读性强,但是命令比较长输入起来比较费事。这样我们可以根据需要创建个性的、易记的命令别名,来提高命令输入的效率降低命令输入错误的概率。

  比如我们要为“get-service”命令创建别名,实现输入gs可调用该命令。可Windows PowerShell命令行中执行“set-alias gs get-service”来实现,这样当我们执行“gs”其实就是执行“get-service”。(图3)

  Windows PowerShell不一样的系统管理体验

  图3 Windows Powershell

  除此之外,我们还可以在Windows PowerShell中为系统中的应用程序创建别名。这样我们调用某个程序时就不用进入其所在路径并输入程序名进行调用了。例如我们要为活动目录工具dsmgmt.exe创建别名ad,可以在Windows PowerShell命令行中执行“set-alias ad c:\windows\system32\dsmgmt.exe”。其中ad就是命令别名,c:\windows\system32\是dsmgmt.exe所在路径。我们在Windows PowerShell命令行中执行ad可以看到调用了dsmgmt.exe工具。(图4)

  Windows PowerShell不一样的系统管理体验

  图4 Windows Powershell

  当然,可以创建别名也可以删除别名。比如我们要删除刚才创建的dsmgmt.exe的别名ad,可以在Windows PowerShell命令行下执行“remove-item alias:ad”即可。这样当我们执行别名ad时会显示错误,因为它已经被删除了。(图5)

  Windows PowerShell不一样的系统管理体验

  图5 Windows Powershell

#p#

  4、自定义函数实现特殊需要

  Windows PowerShell优于CMD的一个特性是可以创建自定义函数以实现某些特殊需要。其实,函数和上面的别名比较类似。不过,函数比别名要复杂,它可以使用参数,我们可以通过函数来创建复杂PowerShell命令的快捷方式。比如我们创建一个名为display-RunningService的函数,以显示当前服务器上正在运行的所有服务,可以执行命令“function display-RunningService {get-service | where-object {$_.Status -eq "Running"}}”。其中function申明创建函数,display-RunningService是函数名,{get-service | where-object {$_.Status -eq "Running"}}是筛选出当前所有状态为Running的系统服务即当前正在运行的服务。函数创建完毕后,如果此后我们要查看当前服务器中正在运行的服务只需在Windows PowerShell的命令行下执行“display-RunningService”即可。如果要删除该函数,我们只需执行“Remove-Item Function: display-RunningService”就可以了。(图6)

  Windows PowerShell不一样的系统管理体验

  图6 Windows Powershell

  上面的例子只是Windows PowerShell自定义函数的一个简单的例子,在系统管理中管理员完全可以根据自己的需要创建各种函数,实现一劳永逸快速进行系统的管理和维护。此外,Windows PowerShell中也可创建带参数的自定义函数,以满足更复杂、灵活的系统管理的需要。

  5、快速访问注册表

  访问注册表是Windows PowerShell一个非常实用的特性,利用该功能我们可以实现对注册表的快速访问,通过注册表键值了解系统状况。特别是在某些特殊情况下,比如注册表被锁时,这应该是我们通往注册表的一条通道。在Windows PowerShell的命令行下可执行“cd -path hklm:\”可进入注册表HKEY_LOCAL_MACHINE主键路径下。继续执行“dir”可显示HKLM主键下的各子键,执行“cd Software\Microsoft\Windows\CurrentVersion\Run”进入系统自启动项下,执行“gp . *”将显示RUN项的属性以及下面的键值,输出结果中前面四个为RUN项的属性,据此管理员可进行进行分析启动项是否正常。说明一下,刚才输入的命令中“Gp. *”是“get-itemproperty -path . -name *”的快捷方式,简化的输入。(图7)

  Windows PowerShell不一样的系统管理体验

  图7 Windows Powershell

#p#

  6、获取详细的系统信息

  Windows PowerShell和系统底层函数无缝结合,我们可以利用其提供的对象获取详细的系统信息。比如我们要获取服务器的DNS信息,可以在Windows PowerShell中执行命令“Get-WMIObject win32_service -filter "name='DNS'" | format-table”以查看当前DNS运行状态。其中“Get-WMIObject win32_service”是使用WMI对象获取系统服务信息,“-filter "name='DNS'”是筛选其中的DNS服务,当然我们可以替换ame='DNS'的DNS获取其他服务信息。“format-table”是以列表的形式显示结果。另外,我们还可以加入-computer参数获取域中其他主机的DNS信息。比如执行命令“Get-WMIObject win32_service -filter "name='DNS'" -computer jp.ctocio.com | format-table”可以获取ctocio.com域中jp主机的DNS运行信息。(图8)

  Windows PowerShell不一样的系统管理体验

  图8 Windows Powershell

  总结:上面六个应用实例只是Windows PowerShell应用中极少的一部分,并且每一部分的实例只是其简单应,并没要深入下去。毫不讳言,Windows PowerShell的一个非常强大的系统管理工具。系统通过本文,大家能够对其引起重视它,进而学习它,使用它,提升你的系统管理、维护效率。