Board logo

标题: [转载教程] 【探索PowerShell 】【十二】筛选器 - Filters [打印本页]

作者: HAT    时间: 2013-9-1 09:13     标题: 【探索PowerShell 】【十二】筛选器 - Filters

【探索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. Filter(关键字) 筛选器名 (参数) {代码}
复制代码
与定义函数不同的是,函数使用"$input"变量来从管道符中获取信息,而筛选器使用的是变量"$_"。在对数据的处理方面,函数与筛选器也有着不同,在函数中,"$input"变量会接受所有的信息,再进行运算,而在筛选器中,"$_"变量会一边接受来自管道符的信息,一边进行筛选(运算)操作。

总结说来,对于函数:管道符将数据一次以集合方式传入函数内部,函数需要使用循环或者递归方式处理。对于筛选器:管道符每传入一个数据,代码就执行一次,直至所有数据传入完毕。

上一节讲述函数的最后,使用了如下的例子:
  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
复制代码
在这里,对其稍作修改,改为:
  1. function fun{
  2.      "run"
  3.      $_.name
  4. }
  5. ls | fun
复制代码
运行结果如下:
PS E:\> type test.ps1
function fun{
     "run"
     $_.name
}

ls | fun
PS E:\> powershell -f test.ps1
run


可以看到,并没有做任何"ls"输出。在原示例中,因为使用了"process"声明,因此,代码块得以往复执行直至数据处理结束,但是,此例中其结果与之大相径庭。

若将其修改为如下形式:
  1. filter fun{
  2.      "run"
  3.      $_.name
  4. }
  5. ls | fun
复制代码
运行结果:

PS E:\> type test.ps1
filter fun{
     "run"
     $_.name
}

ls | fun
PS E:\> powershell -f test.ps1
run
bbs.txt
run
bathome.txt
run
net.txt


如此便可以看到与上一节内容一样的输出。

也就是说,内部含有"process"标记代码块的函数,同样具有筛选器的作用。

本文出自 “马睿的技术博客” 博客,请务必保留此出处http://marui.blog.51cto.com/1034148/295412




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