Windows PowerShell 学习之——Cmdlet处理生命周期
这一次介绍一下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方法。要是只是使用这个方法的默认实现,他什么事情也不会做。如果重写了这个方法,将会按照新方法处理。
Windows PowerShell 学习之——Cmdlet处理生命周期的更多相关文章
- 快速构建Windows 8风格应用30-应用生命周期管理
原文:快速构建Windows 8风格应用30-应用生命周期管理 引言 Windows 8 中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量. 因为系统会自动挂起(有时会终止) ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- Maven学习(四)-- 生命周期和插件
标签(空格分隔): 学习笔记 Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成. 每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建 ...
- Android学习整理之Activity生命周期篇
一.Activity生命周期说明 Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...
- [Windows Powershell]-学习笔记(5)
Powershell自动化变量 Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量,或者说是运行是变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$h ...
- IOS学习笔记37——ViewController生命周期详解
在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewContro ...
- Maven学习笔记(六):生命周期与插件
何为生命周期: Maven的生命周期就是为了对全部的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完好的.易扩展的生命周期.这个生命周期包括了项目的清 ...
- Vue学习系列(四)——理解生命周期和钩子
前言 在上一篇中,我们对平时进行vue开发中遇到的常用指令进行归类说明讲解,大概已经学会了怎么去实现数据绑定,以及实现动态的实现数据展示功能,运用指令,可以更好更快的进行开发.而在这一篇中,我们将通过 ...
- Spring4学习笔记 - Bean的生命周期
1 Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1)通过构造器或工厂方法创建 Bean 实例 2)为 Bean 的属性设置值和对其他 Bean 的引用 3)调用 Bean 的初 ...
随机推荐
- Android内存优化(使用SparseArray和ArrayMap取代HashMap)
在Android开发时,我们使用的大部分都是Java的api,比方HashMap这个api,使用率非常高,可是对于Android这样的对内存非常敏感的移动平台,非常多时候使用一些java的api并不能 ...
- Mosquito的优化——订阅树优化(八)
本文由逍遥子撰写.转发请标注原址: http://blog.csdn.net/houjixin/article/details/46413783 或 http://houjixin.blog.163. ...
- ibatis 开发中的经验 (三)Struts+Spring+Ibatis 开发环境搭建
ibatis项目中用到了一些基本配置,须要和spring集成,看了看这些配置大部分同hibernate中是一样的,也比較好理解.仅仅是须要他们的配置中每个类的含义,还有当中的一些细节 ...
- [Angular2 Form] patchValue, setValue and reset() for Form
Learn how to update part of form model, full form model and reset whole form. We have form definetio ...
- 通过onTouch来确定点击的是listView哪一个item
事实上这主要是用了ListView的一个方法,通过坐标就能够确定当前是哪一个listView,别的我就不多说了直接看看代码吧, lv_flide.setOnTouchListener(new OnTo ...
- jquery插件课程1 幻灯片、城市选择、日期时间选择、拖放、方向拖动插件
jquery插件课程1 幻灯片.城市选择.日期时间选择.拖放.方向拖动插件 一.总结 一句话总结:都是jquery插件,都还比较小,参数(配置参数.数据)一般都是通过json传递. 1.插件配置数据 ...
- Android 带文字的图片分享
这里也记录下上下文,因为做了一个失物招领的App,当有人上交了失物之后,可以将这个消息分享出去,这个消息内容有物品的信息和图片,而微信SDK始终无法做到,就想着把物品信息嵌入到图片中分享出去,先放一个 ...
- pycharm Zooming in the Editor
https://www.jetbrains.com/help/pycharm/zooming-in-the-editor.html To enable changing font size in th ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(3)输入输出函数
一.基本的输入和输出函数的用法 1.printf() //屏幕输出 用法: (1)printf("字符串\n"); (2)printf("输出控制符", 输出 ...
- 数据库使用char要留心
表根据要求需要变更,加一个标识字段,一个字母搞定,我加了一个长度为2的字段 char(2)..... 结果,他们前台开发数据一直不出来,看前台与后台都有记录了,最后发现,此字段我默认加上一个字符,其实 ...