天天看點

<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,如需轉載請自行聯系原作者