如果你愿意,你可以把一个脚本写的非常长,问题是脚本的代码量越大,可读性越差。最好的方式在写脚本时融入函数和类库的概念:
函数:把实现一些小功能的代码写成一个函数,不仅可以增强代码的可读性,还可以很方便的重用。一旦你创建了一个实现特定功能的函数,也可以下次在其它脚本中使用。
类库:把需要的函数嵌入进类库中,就不用每次在执行脚本时拷贝函数,并且还可以在需要时扩充它。另外以函数的方式构建类库,还可以让你更专注特定功能的具体实现,降低脚本开发的复杂度。
在脚本中使用函数
要在脚本中使用函数,最简单的方法自然是将函数直接写在脚本中:
在MyScript.ps1中输入:
param([int]$n=$(throw "请输入一个正整数")) Factorial $n Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total }
这个脚本接收一个正整数参数,然后通过Factorial函数求阶乘。
PS E:> .MyScript.ps1 请输入一个正整数 所在位置 E:MyScript.ps1:1 字符: 22 + param([int]$n=$(throw < <<< "请输入一个正整数")) + CategoryInfo : OperationStopped: (请输入一个正整数:String) [], RuntimeException + FullyQualifiedErrorId : 请输入一个正整数 PS E:> .MyScript.ps1 100 无法将“Factorial”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路 径,请确保路径正确,然后重试。 所在位置 E:MyScript.ps1:2 字符: 10 + Factorial < <<< $n + CategoryInfo : ObjectNotFound: (Factorial:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
不像其它脚本语言,Powershell中的函数必须先定义后使用。
所以更改脚本为:
param([int]$n=$(throw "请输入一个正整数")) Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total } Factorial $n
执行脚本: PS E:> .MyScript.ps1 10 3628800
将脚本分为工作脚本和类库
真正的脚本开发需要处理的问题可能包含许多函数。如果在一个脚本的开头定义许多函数,脚本会显得很凌乱。把函数和工作脚本分开,可以隔离函数,使它不容易被修改。
将Factorial函数保存在PSLib.ps1
Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total }
将脚本修改为:
param([int]$n=$(throw "请输入一个正整数")) . .PSLib.ps1 Factorial $n
执行脚本:
PS E:> .MyScript.ps1 10 3628800
脚本在执行时,先加载类库中的函数。加载函数类库和执行脚本类似,只需要在前面增加一个句号,中间有空格。
类库脚本集中存放
在开始使用类库脚本工作之前,最好先制定出一个存储脚本类库的策略。一种方法是和工作脚本存放在一起,可以使用相对路径;另一种方法是分开存放,加载时就得使用绝对路径了。最好在当前用户的私人目录中存放脚本,相对来说比较安全。
例如下面的例子:
PS E:> md $env:appdataPSLib 目录: C:UsersbaozhenAppDataRoaming Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/4/30 22:47 PSLib PS E:> copy .PSLib.ps1 $env:APPDATAPSLib
本文链接: https://www.pstips.net/powershell-making-scripts-understandable.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
PowerShell 支持什么语言 ?
PowerShell支持PowerShell语言,内置.NET,所以也支持.NET 语言。其它的属于外部程序调用,比如bat,vbs,exe等。
PS E:> md $env:appdataPSLib
PS E:> copy .PSLib.ps1 $env:APPDATAPSLib
这两处是不是少了个”/”
Thanks a lot
脚本在执行时,先加载类库中的函数。加载函数类库和执行脚本类似,只需要在前面增加一个句号,中间有空格。
___
这个我发现需要
. .\
调用才可以