日子过的象流水一般。它静静的从我们身边缓缓流过,不带半分声响。那些我们当年执着的人,执着的事,执着之后,却变成一种负担。 收藏本站
登陆 / 注册 搜索

阅读: 8.3K   回复: 4

[# 系统基础] PowerShell入门(八):函数、脚本、作用域(转)

[复制链接]
soarcloud 「龙战于野」 2016-8-2 15:29 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

本帖最后由 soarcloud 于 2016-8-2 21:26 编辑
  ]3 E- d# S2 R& [+ r
! a3 y  e; n% O. ~$ p  脚本所体现的是PowerShell的编程特性,是任务自动化的基础。函数是比脚本粒度更细的代码复用单元,可以定义在命令行中或者脚本中。作用域就是变量和函数的作用范围,是执行上下文的划分。
) K, o3 F9 t3 ?6 e& {, N) M0 M- T1 n. v9 J' L% l
函数8 `0 H" f2 k5 d) A& y2 }6 A
  函数就是命名的命令列表,与一般编程语言中的函数概念具有相同的范畴。函数中不但可以有简单命令,还可以有控制流程的命令,如if、while、switch等。函数可以有匿名参数或者命名参数列表。命令参数列表可以用大括号或者Param关键字定义。匿名函数可以使用$Args变量来访问。函数也可接收来自管道的对象作为输入,管道对象可以通过$input变量类访问。
) U* i; y, e$ b# @8 _6 W. U  在脚本中定义的函数,可以定义在#require命令和Param关键字之后的任何位置,但要定义在调用之前。还有,自定义的函数不会自动运行,需要被明确调用。可以使用filter或者function定义函数,用filter关键字定义的函数比较简单,而使用function关键字定义的函数可以有更加复杂的功能。
7 A% N7 I6 T: w' f# k+ d  简单函数定义示例如下:4 |' x9 i* b' J
function SayHello
# r2 B( ~1 a3 z- d* m4 |{
' T+ b4 p8 N' N6 G: H   "Hello"
) T9 M4 Z7 ^1 n& J( C}
. b5 l0 x7 e% s函数调用方法与使用Cmdlet方法相似,输入SayHello,并回车。则结果为Hello。. X; h" B$ k0 i* U$ f! R$ _

- x0 A9 U7 p1 x6 d; h脚本
6 k& g/ }1 W% q+ p' v4 I  脚本就是将一些命令存贮到文件文件中,并将该文本文件的扩展名设置为.ps1。脚本中除了可以使用常用cmdlet,控制流程的命令外,还可以定义和调用自定义函数,调用方法与调用cmdlet方法类似。
; ~  j! j+ g4 Y5 F, r+ ^( }" I  脚本也可以有参数,既可以是命名参数也可以是匿名参数。在参数的使用上,脚本与函数非常相似。
5 T+ A% x! P  W  另外,PowerShell的脚本执行策略默认不允许执行任何脚本文件,修改执行策略可执行如下命令:Set-ExecutionPolicy RemoteSigned。需要谨记的是,修改执行策略会带来安全隐患,修改执行策略之前请三思。
  B" u1 y; b. l8 a3 x- H, i' _5 f  简单脚本d:\greet.ps1示例如下
4 ]! @7 T/ [- K$ yParam([String] somebody)7 M, H6 B1 g& U- I$ K, g
function Greet([String] name)- {5 r: }* }# w1 i( {
{
6 _% B; x8 J/ M9 B2 T+ M( ~( S0 K+ @, x    "Hello $name"
( k: C1 [& M3 }2 i& o3 G# }6 ~& h; I}
2 p& g9 F4 r) ^* Y7 F0 b6 U, {7 Gecho "Call function Greet ..."
% _" Q- V0 z( Z6 a5 X& c7 RGreet $somebody/ z9 u& U% Q. c
  脚本调用方法如下:
3 o* o0 [$ y# F1 ~+ y. id:\greet.ps1 "Luke"
4 y) d" t9 _0 [/ A! R) Q* W( c& ^7 b
.\greet.ps1 "Luke"
- |1 s. C1 X6 A# i* a# m% z以上脚本的执行结果是,“Hello Luke”。, I1 u$ Z5 H' r

  Q% |' I! @. y" q作用域+ ]0 U: a* e5 }! J7 _) U, O
  按类型分,有两种作用域:global(全局作用域)和script(脚本作用域)。启动PowerShell命令行后,所有命令行命令在全局作用域中运行。而脚本上下文在script作用域中运行,运行结束后脚本中定义的变量和函数不在可见。这是因为在脚本中定义的变量和函数默认位于script作用域中。当然也可以显示定义变量和函数的作用域,比如function global:fun1 (){…}。这样以来,脚本执行完之后,fun1还能够在全局作用域中执行。9 U2 \, ], s1 k$ t  O3 T+ \
  按轴关系分,可以有父作用域、本地作用域(当前作用域)和子作用域。这些不是新的作用域类型,而是作用域之间的相对关系。子作用域还可以有子作用域,这个层次可以很深。; D7 s/ G0 N/ Q" h3 T4 [3 a# E
  除了可以将脚本中的变量和函数定义在全局作用域中,还可以使用点".”获取来源,将一个普通脚本在本地作用域中执行,执行完毕退出脚本后,所有在脚本中定义的变量和函数,在本地作用域中继续可用。3 X" \4 b- o2 E8 r
  使用点".”获取来源示例如下:
1 E3 C! J! [. R9 C# ?" j. d:\greet.ps1 "Luke"% R/ n8 {& M0 n0 I4 J: l
或者
3 d# @1 \" N0 E* h% X$ ?* a  j& ?. .\greet.ps1 "Luke"* m% T5 ]* I% X: w: t' ?" B2 q2 \
即点".”,空格,然后是一般脚本执行方式。% h3 z% Y+ R9 N- |% }
结语
1 T# b0 i- v; n$ w) ?8 |  函数、脚本和作用域,每个概念要说得详细都得要很大的篇幅。这里只简单说明它们的概念、彼此间的关系以及简单的用法。让读者有个大概的印象,能够拿来就用。) B: ^8 l$ d6 }( r

9 |) r/ }1 l9 g9 E! J, h2 L9 c
$ s! I) o' _9 @! P5 }9 e% l: L  Y) D/ H( `& {; T- u1 w0 H
上一篇
下一篇
帖子热度 8349 ℃
soarcloud发帖没看黄历,被扣了1 个 金币.

深蓝 炉火纯青 2016-8-2 17:51 来自手机 |显示全部楼层

一个男人没有丰富的面部表情,不代表他没有丰富的内心世界。

赞助会员
热心回复。。
雾月 「出类拔萃」 2017-9-8 11:08 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

佛曰,色即是空,空即是色!今晚,偶想空一下
放我一个人生活 「出类拔萃」 2018-5-5 12:45 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

消灭0回复~#j319:
凉冬空巷 「龙战于野」 2018-5-5 21:29 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

  楼主,是你让我深深地理解了'人外有人,天外有天’这句话。谢谢你! #365:
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表