设为首页 收藏本站
查看: 1225|回复: 0

【探索PowerShell 】【十一】函数

[复制链接]

尚未签到

发表于 2018-9-3 10:09:37 | 显示全部楼层 |阅读模式
  一个脚本的功能可能有很多,但是并非都是通过一段代码来完成的。在一个出色的脚本中,实现各个功能代码的独立性,可以保证这个脚本具有高可用性和易维护性,并且当我们改进或删减功能时只需删除对应的代码块即可。通常,代码块就是指函数,调用函数,就是执行不同的代码块,以便实现各种功能。
  先看一个例子:
  

  function Time {Get-Date}
  

  这样,我们就有了一个新函数"Time",其功能实现代码就是"{Get-Date}"。
  尝试调用它:
DSC0000.png

  与编程语言一样,自定义函数同样可以声明参数:
  

function(关键字) 函数名 (参数) {代码}  例如:
  


  • function add ($x,$y)
  • {
  •     $n = $x + $y
  •     “$x+$y=$n”
  • }
  

  运行结果:
DSC0001.png

  在上例这个add函数中,如果参数为空,则不会产生运算。并且,在上例中的变量$n仅对函数内部有效,在函数之外,是不存在此变量的,也就是说,$n是一个局部变量。
  上面的代码还可以用另一种方法来实现:
  


  • function add
  • {
  •     param ($x,$y)
  •     $n = $x + $y
  •     “$x+$y=$n”
  • }
  

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


  • function add
  • {
  •     param ([int]$x=0,[int]$y=0)
  •     $n = $x + $y
  •     "$x+$y=$n"
  • }
  

  那么,通过前面教程的内容,可以知道,很多功能的实现并不是通过简单的参数传递,而是使用了管道符"|",那么,如何让我们的函数也支持管道符功能呢?
  只需在函数中需要接受数据的地方使用"$input"变量即可。如下例所示:
  


  • function FindWindowsFolder
  • {
  •     $input | where-object {$_.Name -eq "Windows"}
  • }
  

  使用如下语句调用:
  

  
ls -path c:\ | FindWindowsFolder
  

  运行结果:
DSC0002.png

  函数的阶段处理
  在函数中,还可以进一步分为下列3个处理步骤:
  1. begin - 只在函数第一次开始时执行一次,适用于放置初始化函数的代码。
  2. process - 每一次调用函数时都执行
  3. end - 只在函数结束时执行一次
  并不是所有的函数都需要这三个步骤,但是一旦选择使用这种函数表达格式,在这三个代码块之外不能再存在其他代码,并且,每个代码块只能出现一次。
  一个典型的例子:
  


  • function fun{
  • begin{
  •     "Start"
  •     $i=1
  • }

  • process{
  •     "run "+$i
  •     $_.name
  •     $i++
  • }

  • end{
  •     "End"
  • }
  • }

  • ls | fun
  

  运行结果:
DSC0003.png




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561914-1-1.html 上篇帖子: 【探索PowerShell 】【十】循环语句 下篇帖子: 【探索PowerShell 】【十二】筛选器 - Filters
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表