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