有時候,非常有必要 所有管道資料處理前,寫一個函數排序
你可能經常使用$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,如需轉載請自行聯系原作者