CmdletBindingAttribute之SupportsPaging的作用

PowerShell3.0中CmdletBindingAttribute的SupportPaging新特性详解
本文详细介绍了PowerShell3.0中CmdletBindingAttribute里的SupportPaging特性,包括其作用及使用方法,通过示例展示了如何配合First、Skip、IncludeTotalCount参数对大型数据进行输出。

今天我们要介绍的是PowerShell 3.0中CmdletBindingAttribute里最后一个新特性:SupportPaging。该参数可以允许用户对输出的数据进行不同的数据形势输出,尤其对于大型的数据结果输出等。

它支持以下三种:First、Skip、IncludeTotalCount

-First:只得到先前的第'n'的对象。

-Skip:忽略先前第'n'个对象数,得到剩余的数据。

-IncludeTotalCount:得到所有数据的个数。

 

我们先从IncludeTotalCount这个参数开始着手,看看它的作用:

Function  Get-PagingInfo
{
    [CmdletBinding(SupportsPaging=$true)]
    Param
    (
        [Parameter()]
        $StringData
    )
    If($PSCmdlet.PagingParameters.IncludeTotalCount)
    {
        [Double]$Accuracy = 1.0
        $PSCmdlet.PagingParameters.NewTotalCount($StringData.count,$Accuracy)
    }
}


如下,我们用方法配合IncludeTotalCount参数可以得到指定对象的数据个数。

Get-PagingInfo -StringData (Get-ChildItem C:\Windows) -IncludeTotalCount
Total count: 80


如下我们引用一个例子来看看如何使用skip 和 first参数:

Function Get-PagingInfo
{
    [CmdletBinding(SupportsPaging = $True)]
    Param 
    (
        [Parameter()]
        $StringData
    )
    Begin{}
    Process{

    }
    End {
        If($StringData.count -gt 0) {
            If($PSCmdlet.PagingParameters.Skip -ge $StringData.count) {
                Write-Verbose "No results satisfy the Skip parameters"
            } Elseif($PSCmdlet.PagingParameters.First -eq 0) {
	            Write-Verbose "No results satisfy the First parameters"
	        } Else {
            $First = $PSCmdlet.PagingParameters.Skip
            Write-Verbose ("First: {0}" -f $First)
            $Last = $First + 
                [Math]::Min($PSCmdlet.PagingParameters.First, $StringData.Count - $PSCmdlet.PagingParameters.Skip) - 1    
            }
            If ($Last -le 0) {
                $StringData = $Null
            } Else {
                $StringData = $StringData[$First..$last]
                Write-Output $StringData            
            }
            Write-Verbose ("Last: {0}" -f $Last)
        }
        If ($PSCmdlet.PagingParameters.IncludeTotalCount){
            [double]$Accuracy = 1.0
            $PSCmdlet.PagingParameters.NewTotalCount($StringData.count, $Accuracy)
        }
    }
}

 

我们可以看到列出前5条数据如下:

Get-PagingInfo -StringData (Get-ChildItem C:\Windows) -first 5


    Directory: C:\Windows


Mode                LastWriteTime     Length Name                                                                                                                        
----                -------------     ------ ----                                                                                                                        
d----         7/26/2012   1:04 AM            AppCompat                                                                                                                   
d----         7/26/2012   1:09 AM            apppatch                                                                                                                    
d-r--         7/26/2012   1:04 AM            assembly                                                                                                                    
d----         7/26/2012   1:04 AM            AUInstallAgent                                                                                                              
d----         7/26/2012   1:04 AM            Boot                    

 

我们也可以同时搭配使用,这个命令是指跳过2条数据后,列出前5条数据。

Get-PagingInfo -StringData (Get-ChildItem C:\Windows) -first 5 -Skip 2


    Directory: C:\Windows


Mode                LastWriteTime     Length Name                                                                                                                        
----                -------------     ------ ----                                                                                                                        
d-r--         7/26/2012   1:04 AM            assembly                                                                                                                    
d----         7/26/2012   1:04 AM            AUInstallAgent                                                                                                              
d----         7/26/2012   1:04 AM            Boot                                                                                                                        
d----         7/26/2012   1:04 AM            Branding                                                                                                                    
d----         7/26/2012   1:07 AM            CbsTemp                        




 

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制方法。通过结合数据驱动技术与Koopman算子理论,将非线性系统动态近似为高维线性系统,进而利用递归神经网络(RNN)建模并实现系统行为的精确预测。文中详细阐述了模型构建流程、线性化策略及在预测控制中的集成应用,并提供了完整的Matlab代码实现,便于科研人员复现实验、优化算法并拓展至其他精密控制系统。该方法有效提升了纳米级定位系统的控制精度与动态响应性能。; 适合人群:具备自动控制、机器学习或信号处理背景,熟悉Matlab编程,从事精密仪器控制、智能制造或先进控制算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现非线性动态系统的数据驱动线性化建模;②提升纳米定位平台的轨迹跟踪与预测控制性能;③为高精度控制系统提供可复现的Koopman-RNN融合解决方案; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注Koopman观测矩阵构造、RNN训练流程与模型预测控制器(MPC)的集成方式,鼓励在实际硬件平台上验证并调整参数以适应具体应用场景。
提供了一套完整的基于51单片机的DDS(直接数字频率合成)信号波形发生器设计方案,适合电子爱好者、学生以及嵌入式开发人员学习和实践。该方案详细展示了如何利用51单片机(以AT89C52为例)结合AD9833 DDS芯片来生成正弦波、锯齿波、三角波等多种波形,并且支持通过LCD12864显示屏直观展示波形参数或状态。 内容概述 源码:包含完整的C语言编程代码,适用于51系列单片机,实现了DDS信号的生成逻辑。 仿真:提供了Proteus仿真文件,允许用户在软件环境中测试整个系统,无需硬件即可预览波形生成效果。 原理图:详细的电路原理图,指导用户如何连接单片机、DDS芯片及其他外围电路。 PCB设计:为高级用户准备,包含了PCB布局设计文件,便于制作电路板。 设计报告:详尽的设计文档,解释了项目背景、设计方案、电路设计思路、软硬件协同工作原理及测试结果分析。 主要特点 用户交互:通过按键控制波形类型和参数,增加了项目的互动性和实用性。 显示界面:LCD12864显示屏用于显示当前生成的波形类型和相关参数,提升了项目的可视化度。 教育价值:本资源非常适合教学和自学,覆盖了DDS技术基础、单片机编程和硬件设计多个方面。 使用指南 阅读设计报告:首先了解设计的整体框架和技术细节。 环境搭建:确保拥有支持51单片机的编译环境,如Keil MDK。 加载仿真:在Proteus中打开仿真文件,观察并理解系统的工作流程。 编译与烧录:将源码编译无误后,烧录至51单片机。 硬件组装:根据原理图和PCB设计制造或装配硬件。 请注意,本资源遵守CC 4.0 BY-SA版权协议,使用时请保留原作者信息及链接,尊重原创劳动成果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值