前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows PowerShell 学习之——Cmdlet处理生命周期

Windows PowerShell 学习之——Cmdlet处理生命周期

作者头像
数据分析
发布2018-03-01 16:22:09
7740
发布2018-03-01 16:22:09
举报
文章被收录于专栏:数据分析

这一次介绍一下Cmdlet处理过程的生命周期

1. 概述

下图展示Windows PowerShell怎样处理一个管道请求指令。

这个流程包括:

  • 指令参数(parameters)初始绑定阶段
  • 指令处理开始
  • 管道参数(parameters)二次绑定阶段
  • 记录处理
  • 指令处理结束

2. 命令行输入绑定参数(parameters)

  第一次绑定期间,Windows PowerShell运行时使用它的管道处理器绑定参数(Arguments)到参数(parameters)。参数(arguments)可能被用户以交互方式指定并作为命令行输入,也可能是被宿主程序以编程方式指定。管道处理器触发指令处理器,指令处理器为每一个受影响指令执行初始绑定。

  对于每一个指令,按照下面顺序执行第一次绑定阶段:

    a. 绑定名称参数

    b. 绑定位置参数

    c. 绑定公共参数

    d. 绑定参数支持调用ShouldProcess方法

    c. 绑定名称动态参数

        绑定位置动态参数

  绑定期间,管道处理器是使用参数的元数据、扩展类型系统(ETS)的类型定义和强制类型转换的参数值。强制类型转换过程中一个特定值,这个特定值是.NET Framework类型变成另外一个类型的参数值。

  假如管道处理器完成处理过程,但发现管道收命令行输入任何未绑定的参数指令,此时管道处理就会失败,处理过程中断。如果这些指令的所有参数绑定成功,管道处理器开始记录处理。

3. 开始指令处理

  所有命令行输入的参数都被绑定了他们的值,这个时候管道处理器开始指令处理。这样,处理器开始调用第一个指令——BeginProcessing方法,并把这个指令发送给管道。要是只是使用这个方法的默认实现,他什么事情也不会做。然而,如果重写这个方法,就会执行该方法的多有处理。

  当管道处理器从一个方法返回,然后调用在管道中区域的指令方法,知道所有的方法都被调用。如果一个指令在管道出现多次,每一次都被作为一个单独的方法处理。

4. 接受管道输入绑定参数

  所有的指令被处理后,管道处理器现在进入外一个绑定阶段。在该操作中,处理器绑定值到每一个通过管道输入的指令上。

  对于接受管道输入的每一个指令,处理器绑定值到这些参数上要按照下面的顺序:

    a. 绑定指令定义管道参数

    b. 绑定动态管道参数

  如果管道处理器发现任何接受的管道输入指令没有绑定参数,管道处理失败,处理中断。如果所有参数成功绑定,管道处理器开始处理记录。

5. 处理记录

  所有接受管道输入的参数都被绑定了值之后,管道处理器开始处理记录。管道处理器在管道中开始第一个指令。

  以下是管道处理器记录处理的步骤:

    a. 确定是否所有强制参数值都是可用,如果存在不可用的,失败。

    b. 确定单一参数集被定义,如果不是,失败。

    c. 在接下来的指令中调用ProcessRecord方法。要是只是使用这个方法的默认实现,他什么事情也不会做。如果重写了这个方法,将会按照新方法处理。

    d. 当管道处理器从ProcessRecord方法返回时,设置所有管道参数的初始值。

    e .检查更多管道对象。

    f. 如果存在更多地对象,再次绑定管道参数。

    g. 重复上面步骤,知道所有管道中的的指令记录都被处理。

  管道中所有指令的记录已经被处理,最后结束指令处理。

6. 结束指令处理

  所有的记录已经被处理,管道处理器告诉后续指令处理器在相关的指令中调用EndProcessing方法。要是只是使用这个方法的默认实现,他什么事情也不会做。如果重写了这个方法,将会按照新方法处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-06-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档