zoukankan      html  css  js  c++  java
  • Windows PowerShell 学习之——Cmdlet处理生命周期

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

    总共分为六个部分

    1.概述

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

    3. 开始指令处理

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

    5. 处理记录

    6. 处理记录

    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方法。要是只是使用这个方法的默认实现,他什么事情也不会做。如果重写了这个方法,将会按照新方法处理。

  • 相关阅读:
    玩转Android之手摸手教你DIY一个抢红包神器!
    NetWork——关于TCP协议的三次握手和四次挥手
    请保持心情快乐,请保持情绪稳定
    第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。
    第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。
    第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
    第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
    第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案
    第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
    第二节:深入剖析Thread的五大方法、数据槽、内存栅栏。
  • 原文地址:https://www.cnblogs.com/BoyceYang/p/3135954.html
Copyright © 2011-2022 走看看