11. PoweShell - 函数
PowerShell 函数
介绍
PowerShell脚本中,可以将常用的代码块集成在一个函数内,这样提高脚本的高可用性和易维护性;当需求变化发生时候,只需改进或删除对应的代码块即可;
代码块即函数;函数使用”$input”变量来从管道中获取信息;函数,在获取数据时,$input变量会接受所有的信息;
筛选器
它是函数的一种特殊形式,使用”$_”变量来从管道中获取信息;在获取信息时,$_变量会一边接受来自管得符的信息,一边进行筛选(运算)操作;
对于函数:管道符将数据一次以集合方式传入函数内部,函数需要使用循环或递归方式处理;
对于筛选器:管道符没传入一个数据,代码就执行一次,直至所有数据传入完毕;
声明函数
Function (关键字) 函数名 (参数) {代码}
Function time {get-date}
调用函数
Time
结果:” Monday,April 27, 2015 3:42:23 PM”
函数的阶段处理
在函数中,还可以进一步分为下列3个处理步骤:
1. begin - 只在函数第一次开始时执行一次,适用于放置初始化函数的代码。
2. process - 每一次调用函数时都执行
3. end - 只在函数结束时执行一次
并不是所有的函数都需要这三个步骤,但是一旦选择使用这种函数表达格式,在这三个代码块之外不能再存在其他代码,并且,每个代码块只能出现一次。
一个典型的例子:
function fun{
begin{
"Start"
$i=1
}
process{
"run "+$i
$_.name
$i++
}
end{
"End"
}
}
ls | fun
注意以上代码等价于:
Function fun{
“run”
$_.name
}
结果:
PS C:\> ls
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 1/27/2015 12:41 PM Bitlocker
d---- 1/29/2015 12:04 PM CCM
d---- 2/2/2015 2:28 PM CritFix
d---- 1/26/2015 4:28 PM Intel
d---- 8/22/2013 11:22 PM PerfLogs
d-r-- 2/12/2015 1:19 PM Program Files
d-r-- 4/2/2015 9:24 AM Program Files (x86)
d---- 1/28/2015 1:38 PM Tools
d-r-- 3/17/2015 10:14 AM Users
d---- 4/16/2015 1:52 AM Windows
PS C:\> ls | fun
Start
run 1
Bitlocker
run 2
CCM
run 3
CritFix
run 4
Intel
run 5
PerfLogs
run 6
Program Files
run 7
Program Files (x86)
run 8
Tools
run 9
Users
run 10
Windows
End
具体实例
实例一:
Function add ($x,$y)
{
$n =$x+$y
“$x+$y = $n”
}
调用: add 1 1
结果:1+1=2
实例二:param ()参数
Function add ()
{
Param($x,$y) ##参数声明
$n =$x+$y
“$x+$y = $n”
}
调用: add 2 2
结果:2+2=4
实例三:使用管道符接受过滤好的变量,返回D:\下面123的目录;
function FindWindowsFolder
{
$input |where-object {$_.Name -eq "123“}
}
使用如下语句调用:
ls -path d:\ | FindWindowsFolder <enter>
运行结果:
PS C:\> ls -path d:\ | FindWindowsFolder
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 4/27/2015 3:52 PM 123
参考:http://marui.blog.51cto.com/1034148/294775
http://marui.blog.51cto.com/1034148/295412
本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1639290
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。