在日常工作中
,管理员经常需要与操作系统进行交互
。虽然交付的方式有很多种
,对于对于
服务器的维护来说,通过PowerShell来进行交互,是首选的方式
。通常情况下,PowerShell可以提供强大的本地脚本语言。也即是说,脚本可以被移植到所有巴本的Windows操作系统中。由于大部分
企业并不是很纯的2008应用环境。如可能只有一个域控制使用的是2008操作系统,其他
服务器以及客户端采用的是其他低版本的操作系统,甚至采用的是非Windows操作系统。在这种情况下,通过PowerShell对应用环境进行维护,是首要的选择。在这篇文章中,笔者就谈谈这个PowerShell工具的使用技巧。
一、cmdlet来实现自定义的功能。
Cmdlet是Powershell的核心工具之一。这个工具跟传统的CLI Shell有点类,也是一种内置的命令。不过在可扩展性方面有本质的不同。Cmdlet通过将NET类编译为动态链接库,并在实际运行时加载到PowerShell工具中来实现。这也就是说,其实并没有固定的Cmdlet类。只要管理员有这个能力并且拥有相关的权限,就可以使用PowerShell的软件开发包来编写自定义的Cmdlet,从而实现自定义的功能。
由于不同的
企业其应用环境千差万别。为此系统工程师往往可以通过这个工具来编写一些常用的管理命令。在需要使用时,直接调用即可。而不需要重新编写。对于一些带有很多参数的命令,或者命令脚本,就显得非常的方便。在使用这个功能时,笔者认为管理员需要注意如下内容。
一是语法上面的问题。Cmdlet始终以动词和名词来进行命名。注意,在动词与名词之间有连字符号来进行分隔。通常情况下,动词说明这个命令所需要执行的操作,而名词则代表的是操作的对象。举一个简单的例子:get-process。get是动词,表示取得;而Process是操作的对象,表示进程。
二是参数的问题。跟普通的CMD命令一样,在PowerShell中也可以带一些参数,来实现特定的功能,或者对显示的结果进行过滤。在实际工作中,通过参数可以简化显示的结果。而且PowerShell在参数这方面的功能比较强大,如其中的很多参数还可以使用通配符。如Get-Process W*。这表示显示所有以W开头的进程。
三是需要注意Cmdlet工具的一个局限性。当Cmdlet在执行命令时,一次只执行一个单独的命令。如果某个功能(如将某个文件复制到其他一个地方,然后再对这个原文件进行重命名)可能需要通过多个动作来完成,此时必须要通过两个命令来完成。不过有些功能的动作有可能有十几个命令构成,此时如果使用Cmdlet来实现的话,并不是很合适。在这种情况下,可能需要用到我们下面要介绍的脚本功能。
二、脚本执行批量的维护工作。
在谈到Cmdlet这个工具时,笔者强调过,其一次性只可以执行一个命令。如果要执行多个命令的话,则需要通过脚本来实现。其实这里谈的脚本,就是存放在硬盘中的一个文件。而这个文件中可能有多个Cmdlet指令。通过调用这个文件,可以让系统一次性同时执行多个命令,以完成特定的维护任务。
PowerShell指的脚本是一个以.PSL为扩展名的文件。系统工程师在需要时可以随时进行访问。这个脚本可以运行于PowerShell会话中。这里值得一提的是,制作好的脚本,还可以运行在普通的Cmd环境中。也就是说,脚本与Windows操作系统传统的CMD具有很好的兼容性。不过在调用掉本时,CMD环境还是有点区别。如果要从CMD命令提示符下运行PowerShell脚本,需要先做一个工作。即使用CD命令来更改脚本所在的目录位置,或者将这个脚本文件复制到特定的位置中。然后使用命令参数并制定要运行的脚本以运行PowerShell可执行文件。虽然如此,但是在大部分情况下,笔者还是建议在Powershell中来调用脚本。这可以避免路径不对的烦恼。在运行某个脚本时,系统工程师可以根据需要,决定是否需要使用参数。
三、函数可以对当前实例进行维护。
在其他
编程语言中,都会有过程或者函数的方法。通过这种方式,可以实现某个特定的任务。如定期更新某组数据等等。在PowerShell中的函数,其实起到的也是这方面的作用。PowerShell的函数,提供了给命令列表分配名称的途径。在掌握这个功能时,笔者认为需要注意如下几点。
一是需要注意,函数与脚本之间的区别。函数也可以同时执行多个命令。他们两个之间的区别,主要对于实例的依赖关系。一般来说,每个Shell脚本都会自动启动Shell的新实例。而函数只会运行在同一个Shell的当前实例中。简单的说,就是一个脚本对应一个实例。而多个函数对应于一个实例。在实际工作中,这是系统工程师判断使用脚本还是函数的重要依据。另外,在有效性上也有所区别。命令行中定义的函数只会在当前的PowerShell会话期间有效,并且只处于局部作用域中。对于后续新的会话,并不生效。也就是说,如果要在所有会话中(特别是后续新添加的会话中也有效的话),就需要使用脚本,而不是函数。
二是重复利用的问题。虽然在命令行上定义的函数是在PowerShell环境中动态创建一系列命令集合的有效方法。但是需要注意,这些函数通常情况下只保存在内存中。当PowerShell关闭后者重新启动后会自动删除这些函数。这也就是说,函数并不会独立的保存在硬盘上,为此其可重复利用性比较差。在实际工作中,虽然有可能动态的创建复杂函数,但是我们往往不这么做。有经验的系统工程师会将函数保存在脚本文件中。然后通过调用脚本文件来调用自定义的函数。这就可以提高函数的可用性。
在使用函数这个功能时,主要是需要关注与脚本文件之间的差异,并明确函数是一次性的。当Powershell关闭时函数也就不存在了。在实际工作中,通常是将函数与脚本文件结合使用。通过文件的形式将函数固化下来,以实现重复调用的目的。
四、本地命令来调用系统的外部程序。
用过Cmd的用户知道,Cmd可以分为内部命令与外部命令。虽然外部命令不经常使用,但是其功能还是很强大的。在遇到一些特定的需求时,使用外部命令能够迅速的解决问题。其实在Powershell中,将程序分为内部程序与外部程序。如果需要调用外部程序的话,则需要通过本地命令来调用。本地命令包含操作系统可以运行的外部程序。在使用本地命令来调用外部程序时,需要注意如下内容。
一是运行本地命令的话,系统必须要创建新的进程。此时可能会影响系统的性能。如果进程数达到饱和的话,系统工程师还无法调用外部程序。故大部分情况下,这个命令并没有其他类型的PowerShell命令来的有效。