PowerShell入门教程之函数、脚本、作用域介绍

脚本所体现的是PowerShell的编程特性,是任务自动化的基础。函数是比脚本粒度更细的代码复用单元,可以定义在命令行中或者脚本中。作用域就是变量和函数的作用范围,是执行上下文的划分。

函数

  函数就是命名的命令列表,与一般编程语言中的函数概念具有相同的范畴。函数中不但可以有简单命令,还可以有控制流程的命令,如if、while、switch等。函数可以有匿名参数或者命名参数列表。命令参数列表可以用大括号或者Param关键字定义。匿名函数可以使用$Args变量来访问。函数也可接收来自管道的对象作为输入,管道对象可以通过$input变量类访问。

  在脚本中定义的函数,可以定义在#require命令和Param关键字之后的任何位置,但要定义在调用之前。还有,自定义的函数不会自动运行,需要被明确调用。可以使用filter或者function定义函数,用filter关键字定义的函数比较简单,而使用function关键字定义的函数可以有更加复杂的功能。

  简单函数定义示例如下:

代码如下:

function SayHello
{
   "Hello"
}

函数调用方法与使用Cmdlet方法相似,输入SayHello,并回车。则结果为Hello。

脚本

  脚本就是将一些命令存贮到文件文件中,并将该文本文件的扩展名设置为.ps1。脚本中除了可以使用常用cmdlet,控制流程的命令外,还可以定义和调用自定义函数,调用方法与调用cmdlet方法类似。

  脚本也可以有参数,既可以是命名参数也可以是匿名参数。在参数的使用上,脚本与函数非常相似。

  另外,PowerShell的脚本执行策略默认不允许执行任何脚本文件,修改执行策略可执行如下命令:Set-ExecutionPolicy RemoteSigned。需要谨记的是,修改执行策略会带来安全隐患,修改执行策略之前请三思。

简单脚本d:\greet.ps1示例如下

代码如下:

Param([String] somebody)
 
function Greet([String] name)
{
    "Hello $name"
}
 
echo "Call function Greet ..."
Greet $somebody

脚本调用方法如下:

代码如下:

d:\greet.ps1 "Luke"

代码如下:

.\greet.ps1 "Luke"

以上脚本的执行结果是,“Hello Luke”。

作用域

  按类型分,有两种作用域:global(全局作用域)和script(脚本作用域)。启动PowerShell命令行后,所有命令行命令在全局作用域中运行。而脚本上下文在script作用域中运行,运行结束后脚本中定义的变量和函数不在可见。这是因为在脚本中定义的变量和函数默认位于script作用域中。当然也可以显示定义变量和函数的作用域,比如function global:fun1 (){…}。这样以来,脚本执行完之后,fun1还能够在全局作用域中执行。

  按轴关系分,可以有父作用域、本地作用域(当前作用域)和子作用域。这些不是新的作用域类型,而是作用域之间的相对关系。子作用域还可以有子作用域,这个层次可以很深。

  除了可以将脚本中的变量和函数定义在全局作用域中,还可以使用点".”获取来源,将一个普通脚本在本地作用域中执行,执行完毕退出脚本后,所有在脚本中定义的变量和函数,在本地作用域中继续可用。

  使用点".”获取来源示例如下:

代码如下:

. d:\greet.ps1 "Luke"

或者

代码如下:

. .\greet.ps1 "Luke"

即点".”,空格,然后是一般脚本执行方式。

结语

  函数、脚本和作用域,每个概念要说得详细都得要很大的篇幅。这里只简单说明它们的概念、彼此间的关系以及简单的用法。让读者有个大概的印象,能够拿来就用。

(0)

相关推荐

  • PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧

    在开始关于脚本.对象和远程处理等复杂的功能之前,一直想再写一篇关于交互式运行环境的文章.因为我觉得这很重要,但是有什么是不重要呢?:)所以,说到底可能是个人喜好吧,我就是特别喜欢这种立等可取的交互方式. 如何高效地使用PowerShell的交互式运行环境呢?所谓"高效",既跟使用这个工具的熟练程度有关,也跟使用这个工具的习惯有关.习惯有无意中养成的,也有主动养成的.如果你恰好玩PowerShell不久,那么就从现在开始主动养成一些好习惯吧. 多用Tab键 在运行环境中,Tab键有补全内

  • PowerShell入门教程之编写和使用脚本模块实例

    现在通过编写模块就可以在PowerShell命令行或者脚本中管理大型.分布式软件系统,就像Exchange Server和SharePoint Server正在做的那样.你有这样的需求吗? 模块.脚本模块 模块是PowerShell V2中引入的概念,用以改进之前提出的"管理单元".将管理单元也作为模块(二进制模块)处理之后,PowerShell中就包括两种模块--脚本模块和二进制模块.那么什么是模块呢?模块就是包含一些PowerShell命令.项的程序包,它以一个整体被分发共享和加载

  • PowerShell入门教程之访问.Net程序集、COM和WMI实例

    PowerShell可以设计的大而全,重新实现一切:也可以像现在一样设计成胶水语言,利用现有的资源.特别是,与.Net.COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩. 与新锐.Net联姻 在Windows的世界里,.Net代表着现在和将来,是新生力量.与.Net联姻,就意味着榜上了粗腿,迈上了快车道.号称基于.Net Framework,那么使用.Net的基类就易如反掌.基本步骤如下:1.添加类所在程序集:2.创建类的实例:3.调用实例的函数或者属性.

  • PowerShell入门教程之PowerShell和Cmd命令行的关系?

    PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系.让我们慢慢道来... PowerShell中的CMD命令 启动PowerShell,在其中输入几个常用的Cmd命令 复制代码 代码如下: PS D:\Projects\Practise\PowerShell> dir     Directory: D:\Projects\Practise\PowerSh

  • PowerShell入门教程之快速学习PowerShell的几个方法

    如何快速地掌握PowerShell呢?总的来说,就是要尽可能多的使用它,就像那句谚语说的:Practice makes perfect.当然这里还有一些原则和方法让我们可以遵循. 有效利用交互式环境 一般来说,PowerShell有两个主要的运行环境:PowerShell和PowerShell ISE.前者是PowerShell的运行环境,后者是PowerShell集成脚本环境,也就是编写脚本(.ps1)的地方.当然,你也可以使用记事本或者其他编辑器来编写脚本.对于初学者来说,一上来就写脚本绝对

  • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

    单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因.或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务.本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用. 毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向.即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令.需要说明的是,这里的调用分两个层次:一.简单的在其中一个的环境中执行另外一个命令,完成部分工作:二.在其中一个的执行上

  • PowerShell入门教程之PowerShell管道介绍

    管道对于Shell来说是个化腐朽为神奇的东西,它极大地提高了在命令行上编程的能力.深入理解并熟练使用管道是PowerShell高手之路的必经阶段.没有管道,我们就不得不通过许多的变量来保存中间结果,虽然这是脚本和其他编译型语言的惯用伎俩,但对于战斗在命令行上的Shell而言,就是一件非常痛苦的事情. 管道模型 顾名思义,管道就是用管子将事物连接起来构成通道.从表面上看,管道是一串由管道符号(|)连接起来的一些命令.从功能来看,管道就像流水线,将上一个处理的结果,传送给下一个处理作为输入.由管道连

  • PowerShell入门教程之创建和使用配置文件实例

    在命令行中定义别名.变量和函数,只是将它们添加在当前PowerShell的会话中.退出会话后,这些更改就会丢失.想要在以后的会话中也能使用它们,就要将它们定义在配置文件中. 配置文件 PowerShell的配置文件,不像Windows操作系统中那样使用.ini文件,也不像多数应用程序那样使用XML文件.PowerShell的配置文件都是些普通的PowerShell脚本文件.需要注意的是,这些配置文件的文件名是固定.不能更改的.并且它们受到脚本执行策略的约束,就是说在默认情况下,也就是脚本执行策略

  • PowerShell入门教程之远程操作运行PowerShell的方法

    PowerShell远程操作是远程管理的基础,它为集中管理分布式系统提供了又一种可靠.高效的方法. 一般来说PowerShell远程操作依赖于远程处理基础结构,但为数不多的几个自身具有远程处理能力的命令除外,如Get-Service.Get-Process.Get-WMIObject.Get-EventLog和Get-WinEvent等.(不难看出,这些命令都是"读取"系统的某些方面的信息,不做更改.它们依赖.Net Framework完成远程操作.) 配置远程基础结构 远程基础结构是

  • PowerShell入门教程之PowerShell有什么用?

    PowerShell能干什么呢?就像序言中提到的那样,PowerShell首先是个Shell,定义好了一堆命令与操作系统,特别是与文件系统交互,能够启动应用程序,甚至操纵应用程序:第二,PowerShell允许将几个命令组合起来放到文件里执行,实现文件级的重用,也就是说有脚本的性质:第三,PowerShell能够能够充分利用.Net类型和COM对象,来简单地与各种系统交互,完成各种复杂的.自动化的操作. 一.与文件系统交互.运行应用程序 就像在Dos中一样,在PowerShell的交互界面上键入

随机推荐