有时候,非常有必要 所有管道数据处理前,写一个函数排序
你可能经常使用$Input来进行输入,但是有一些是在3.0后引进的输入新的自动变量,它将会让我们写出更好的代码.
首先我们看看使用powershell2.0提供的新功能,以及兼容的代码。
我们在输入的时候来收集和存储管道。脚本看起开可能常规模式是这样。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>function</code> <code>Test-Function</code>
<code>{</code>
<code> </code><code>param</code>
<code> </code><code>(</code>
<code> </code><code>[</code><code>Parameter</code><code>(</code><code>ValueFromPipeline</code><code>=</code><code>$true</code><code>)]</code>
<code> </code><code>$InputObject</code>
<code> </code><code>)</code>
<code> </code><code>begin</code>
<code> </code><code>{</code>
<code> </code><code>$container</code> <code>= @()</code>
<code> </code><code>}</code>
<code> </code><code>process</code>
<code> </code><code>$container</code> <code>+= </code><code>$InputObject</code>
<code> </code><code>end</code>
<code> </code><code>$count</code> <code>= </code><code>$container</code><code>.Count</code>
<code> </code><code>"Collected $count elements."</code>
<code>}</code>
当开始管理函数的数据的时候,他收集所有项目,然后开始处理,我们通常键入(当然有更好的方法,这里我就说明一下如何来用函数收集数据)
<code>PS> 1..100 | </code><code>Test-Function</code>
<code>Collected 100 elements.</code>
这是一个很多的代码,一个非常简单的任务,但是说明了他的代码很低效,它正在使用一个数组来收集收据,需要进行后续扩展,每一次我们都必须输入新的元素
当然,我们可以来完善它,例如,使用一个ArrayList对象作为集成。
但是在powershell3.0中,这样的事情变得非常轻松,自动输入变量,将为我们自动的数据采集和减少大家的代码量
<code> </code><code>$count</code> <code>= </code><code>$Input</code><code>.Count</code>
<code> </code><code>"Collected $count elements."</code>
此功能和2.0上边的脚本执行结果是完全相同的,但是减少的代码,确实轻松不少执行效率也非常快,但是只能在powershell3.0中才可以使用。
在powershell2.0中输入的不是一个数组,只是一个枚举。枚举成员没有数量,你只能读一次。
因为它很容桂是这个功能与老的powershell版本兼容,我们要做的就打开输入到一个数组而已,这是powershell3.0默认的情况下,这是一个功能所有powershell版本都可以使用的。
<code> </code><code>$alldata</code> <code>= @(</code><code>$Input</code><code>)</code>
<code> </code><code>$count</code> <code>= </code><code>$alldata</code><code>.Count</code>
注意:一定要把使用@()把输入$input 时圈起,如果不是上一个数组就应该使他变成一个新数组形式。
我们现在随时可以读取计数器内容。
记住的一点:
在使用$input 一定要加上管道参数@() 来解决数组的产生。
本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1224851,如需转载请自行联系原作者