Board logo

标题: [转载教程] 【探索PowerShell 】【十一】函数 [打印本页]

作者: HAT    时间: 2013-8-31 11:56     标题: 【探索PowerShell 】【十一】函数

【探索PowerShell 】【一】初识http://www.bathome.net/thread-26144-1-1.html
【探索PowerShell 】【二】基本操作http://www.bathome.net/thread-26148-1-1.html
【探索PowerShell 】【三】PowerShell下使用Aliaseshttp://www.bathome.net/thread-26149-1-1.html
【探索PowerShell 】【四】PowerShell的对象、格式与参数http://www.bathome.net/thread-26159-1-1.html
【探索PowerShell 】【五】PowerShell基础知识http://www.bathome.net/thread-26162-1-1.html
【探索PowerShell 】【六】脚本基础简要http://www.bathome.net/thread-26163-1-1.html
【探索PowerShell 】【七】变量http://www.bathome.net/thread-26165-1-1.html
【探索PowerShell 】【八】数组、哈希表(附:复制粘贴技巧)http://www.bathome.net/thread-26166-1-1.html
【探索PowerShell 】【九】条件控制、逻辑http://www.bathome.net/thread-26167-1-1.html
【探索PowerShell 】【十】循环语句http://www.bathome.net/thread-26168-1-1.html
【探索PowerShell 】【十一】函数http://www.bathome.net/thread-26174-1-1.html
【探索PowerShell 】【十二】筛选器 - Filtershttp://www.bathome.net/thread-26187-1-1.html
【探索PowerShell 】【十三】WMI对象http://www.bathome.net/thread-26188-1-1.html
【探索PowerShell 】【十四】使用WMI对象的方法http://www.bathome.net/thread-26189-1-1.html
【探索PowerShell 】【十五】引号与转义字符http://www.bathome.net/thread-26190-1-1.html

一个脚本的功能可能有很多,但是并非都是通过一段代码来完成的。在一个出色的脚本中,实现各个功能代码的独立性,可以保证这个脚本具有高可用性和易维护性,并且当我们改进或删减功能时只需删除对应的代码块即可。通常,代码块就是指函数,调用函数,就是执行不同的代码块,以便实现各种功能。

先看一个例子:
  1. function Time {Get-Date}
复制代码
这样,我们就有了一个新函数"Time",其功能实现代码就是"{Get-Date}"。

尝试调用它:

PS E:\> function Time {Get-Date}
PS E:\> Time

2013年8月31日 11:48:56


与编程语言一样,自定义函数同样可以声明参数:
function(关键字) 函数名 (参数) {代码}
  1. function add ($x,$y)
  2. {
  3.     $n = $x + $y
  4.     "$x+$y=$n"
  5. }
复制代码
在上例这个add函数中,如果参数为空,则不会产生运算。并且,在上例中的变量$n仅对函数内部有效,在函数之外,是不存在此变量的,也就是说,$n是一个局部变量。

上面的代码还可以用另一种方法来实现:
  1. function add
  2. {
  3. param ($x,$y)
  4.     $n = $x + $y
  5.     "$x+$y=$n"
  6. }
复制代码
其中,"param"的作用是声明参数。

大多数函数对于参数的数据类型都是有要求的,例如上列示例,如果要求函数实现运算功能,则要求参数使用数字类型,如果要求的功能是字符串相加,则要求为字符类型。这就要求在编写函数时,声明参数的同时声明其数据类型,最好也赋予其默认值,这样在调用时才不会发生错误,其实很多错误可能已经发生但是我们却看不到,因为不一定所有的函数都有输出,可能只是将结果进行传递,这样,将会给排错带来很大困难。

例:
  1. function add
  2. {
  3. param ([int]$x=0,[int]$y=0)
  4.     $n = $x + $y
  5.     "$x+$y=$n"
  6. }
复制代码
那么,通过前面教程的内容,可以知道,很多功能的实现并不是通过简单的参数传递,而是使用了管道符"|",那么,如何让我们的函数也支持管道符功能呢?

只需在函数中需要接受数据的地方使用"$input"变量即可。如下例所示:
  1. function FindWindowsFolder
  2. {
  3.     $input | where-object {$_.Name -eq "Windows"}
  4. }
复制代码
使用如下语句调用:
  1. ls -path c:\ | FindWindowsFolder
复制代码
函数的阶段处理

在函数中,还可以进一步分为下列3个处理步骤:

1. begin - 只在函数第一次开始时执行一次,适用于放置初始化函数的代码。
2. process - 每一次调用函数时都执行
3. end - 只在函数结束时执行一次

并不是所有的函数都需要这三个步骤,但是一旦选择使用这种函数表达格式,在这三个代码块之外不能再存在其他代码,并且,每个代码块只能出现一次。

一个典型的例子:
  1. function fun{
  2. begin{
  3.     "Start"
  4.     $i=1
  5. }
  6. process{
  7.     "run "+$i
  8.     $_.name
  9.     $i++
  10. }
  11. end{
  12.     "End"
  13. }
  14. }
  15. ls | fun
复制代码
本文出自 “马睿的技术博客” 博客,请务必保留此出处http://marui.blog.51cto.com/1034148/294775




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2