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

本文介绍如何利用PowerShell 3.0的新特性优化管道数据处理,通过对比2.0与3.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
function Test-Function
{
    param
    (
        [Parameter(ValueFromPipeline=$true)]
        $InputObject
    )
    begin
    {
        $container = @()
    }
    process
    {
        $container += $InputObject
    }
    end
    {
        $count $container.Count
        "Collected $count elements."
    }
}



当开始管理函数的数据的时候,他收集所有项目,然后开始处理,我们通常键入(当然有更好的方法,这里我就说明一下如何来用函数收集数据)

1
2
PS> 1..100 | Test-Function
Collected 100 elements.

这是一个很多的代码,一个非常简单的任务,但是说明了他的代码很低效,它正在使用一个数组来收集收据,需要进行后续扩展,每一次我们都必须输入新的元素
当然,我们可以来完善它,例如,使用一个ArrayList对象作为集成。
但是在powershell3.0中,这样的事情变得非常轻松,自动输入变量,将为我们自动的数据采集和减少大家的代码量

1
2
3
4
5
6
7
8
9
10
function Test-Function
{
    param
    (
        [Parameter(ValueFromPipeline=$true)]
        $InputObject
    )
    $count $Input.Count
    "Collected $count elements."
}


此功能和2.0上边的脚本执行结果是完全相同的,但是减少的代码,确实轻松不少执行效率也非常快,但是只能在powershell3.0中才可以使用。
在powershell2.0中输入的不是一个数组,只是一个枚举。枚举成员没有数量,你只能读一次。

因为它很容桂是这个功能与老的powershell版本兼容,我们要做的就打开输入到一个数组而已,这是powershell3.0默认的情况下,这是一个功能所有powershell版本都可以使用的。


1
2
3
4
5
6
7
8
9
10
11
function Test-Function
{
    param
    (
        [Parameter(ValueFromPipeline=$true)]
        $InputObject
    )
    $alldata = @($Input)
    $count $alldata.Count
    "Collected $count elements."
}

注意:一定要把使用@()把输入$input 时圈起,如果不是上一个数组就应该使他变成一个新数组形式。
我们现在随时可以读取计数器内容。

记住的一点:

在使用$input 一定要加上管道参数@()  来解决数组的产生。





     本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1224851,如需转载请自行联系原作者



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值