天天看点

<Power Shell>05解决powershell3.0收集数据时候数组生成

有时候,非常有必要 所有管道数据处理前,写一个函数排序

你可能经常使用$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&gt; 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,如需转载请自行联系原作者