转至:http://www.cnblogs.com/ceachy/archive/2013/02/22/PowerShell_Pipeline.html

管道对于Shell来说是个化腐朽为神奇的东西,它极大地提高了在命令行上编程的能力。深入理解并熟练使用管道是PowerShell高手之路的必经阶段。没有管道,我们就不得不通过许多的变量来保存中间结果,虽然这是脚本和其他编译型语言的惯用伎俩,但对于战斗在命令行上的Shell而言,就是一件非常痛苦的事情。

管道模型

  顾名思义,管道就是用管子将事物连接起来构成通道。从表面上看,管道是一串由管道符号(|)连接起来的一些命令。从功能来看,管道就像流水线,将上一个处理的结果,传送给下一个处理作为输入。由管道连接起来的命令从左到右依次执行,最后将结果输出到控制台。以前的管道流传送的都是字符串,或者是可以格式化为字符串的表达式,PowerShell的管道流则可以传输对象。

PowerShell中的管道如何工作?

  PowerShell的管道,能够传递对象,这是一个巨大的进步。到这个时候,管道才有了点函数调用的味道。调用方能够传递复杂的对象,接收方则要进行对象的类型匹配,匹配不正确命令执行就会出错。但这里也有例外。PowerShell管道不但可以按整个对象传递,还能够按照属性名传递,这一特性大大提高了管道的可用性,和处理能力。这使得我们能够在类型不匹配的情况下,也能够使用管道,传递对象的部分属性。

管道使用举例

在PowerShell中有一些专门为管道设计的命令如get-member、sort、measure等,也有一些命令虽然不是为管道专门设计,但却在管道中大放光彩。下面举例说明几个最常用的命令:

select

  在管道中使用select命令,就像在Cmd中使用dir一样常见。不用看select命令的详细语法,你就能写出最常用的select使用方法。如下:

dir | select name,LastWriteTime

这个命令显示当前文件夹中的文件和子文件夹的名字和最后修改日期。

where

  where命令使用来做筛选的,可以简写为?,使用示例如下:

dir | ? {$_.mode –like “d*”} | select name,LastWriteTime

这个命令能够只显示出当前文件夹的子文件夹,而不显示文件。

foreach

  foreach可以对传递过来的每个对象进行处理,可以简写为‘%’。使用示例如下:

dir | ? {$_.mode -notlike "d*"} | % {echo "The size of file '$($_.name)' is $($_.Length)"}

这个命令的结果是输出类似“The size of file 'myScript.ps1' is 1520”这样的信息,每个文件一行。

结语

  管道的好处很多,在这小小的篇幅中是说不完的。上道以后,慢慢体会,你会知道管道的妙处。

【转】PowerShell入门(七):管道——在命令行上编程的更多相关文章

  1. Linux命令行上程序执行的那一刹那!

    转自:http://www.cppblog.com/cuijixin/archive/2008/03/14/44463.html by falcon<zhangjinw@gmail.com> ...

  2. 命令行上的narrowing(随着输入逐步减少备选项)工具

    前面在介绍zsh的时候,说过它的补全用来起比bash的Tab补全方便多了,在有多个备选项是你只要用光标键来挑选就是了,而不是全列出来提示你再多输入几个字符.而Emacs的anything / helm ...

  3. Linux 在一个命令行上执行多个命令

    Linux 在一个命令行上执行多个命令 1. [ ; ] 如果被分号(;)所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令. 2. [ && ] 如果命令被 &am ...

  4. Linux 在一个命令行上执行多个命令(转载)

    对于单个命令执行我想大多数人都是明了的,也就是在一个命令行上执行一条命令.那对于在一行上执行多个命令怎么办呢,其实也很简单,只需在各命令之间加上特殊命令符号,我们常规使用到的有3个特殊命令符号. 1. ...

  5. 自学Linux Shell16.4-在命令行上使用函数

    点击返回 自学Linux命令行与Shell脚本之路 16.4-在命令行上使用函数 脚本函数不仅可以用作shell脚本命令,也可以用作命令行界面的命令.一旦在shell中定义了函数,可以从系统的任意目录 ...

  6. Linux (rz、sz命令行)与本地电脑 命令行上传、下载文件

    Linux 与本地电脑直接交互, 命令行上传.下载文件. 一.lrzsz命令行安装: 1.rpm安装:(链接: http://pan.baidu.com/s/1cBuTm2 密码: vijf) rpm ...

  7. 您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具

    Windows 上的安装为了在 Windows 上安装 GCC,您需要安装 MinGW.为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinGW 下载页面,下载最 ...

  8. 在命令行上启动genymotion虚拟机

    自从有了genymotion,多机联调就解放了,一台电脑运行两个genymotion虚拟机毫无压力,不过也看用的是哪种os image,之前我以为google自己的Nexus应该最适应,哪知道开起来比 ...

  9. Ubuntu server使用命令行上板VPNclient

    Ubuntu server使用命令行上板VPNclient VPN,虚拟专用网络,这个技术还是非常有用的.近期笔者參与的项目中就使用上了VPN,大概情况是这种.有两个开发团队,在异地,代码服务器在深圳 ...

随机推荐

  1. jquery插件之表格隔行变色并鼠标滑过高亮显示

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现表格隔行变色,且鼠标移动在表格的某一行上时,该行能高亮显示.整体代码如 ...

  2. 点击页面其它地方隐藏div所想到的jQuery的delegate

    在网页开发的过程中经常遇到的一个需求就是点击一div内部做某些操作,而点击页面其它地方隐藏该div.比如很多导航菜单,当菜单展开的时候,就会要求点击页面其它非菜单地方,隐藏该菜单. 先从最简单的开始, ...

  3. [LintCode] Maximum Gap 求最大间距

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  4. Pixar Shorts 皮克斯动画短片全集

    [原创短片](Theatrical Shorts)16部 <安德鲁和威利冒险记><顽皮跳跳灯><红色的梦><锡铁小兵><小雪人大行动>< ...

  5. android-数据存储之手机内部file存储

    一.基础概要 1.说明: 1>应用程序运行需要一些较大的数据或者图片可保存在手机内部 2>文件类型:任意 3>路径:/data/data/packageName/files/ 4&g ...

  6. C语言输入多组问题~ungetc回退字符到stdin

    题目描述 输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m]   输出 YES or NO  查找有则YES 否则NO . 输入描述: 输入有多组数据 ...

  7. Yii源码阅读笔记(二十九)

    动态模型DynamicModel类,用于实现模型内数据验证: namespace yii\base; use yii\validators\Validator; /** * DynamicModel ...

  8. Git 实战教程

    CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而大家工作的时候,用的都是自己的 ...

  9. .Net using,string.Empty初探

    前两天够哦年公司培训,讲了编码优化.现在初步总结下:(有些不大确定的就不讲了) 多次字符串拼接(特别是循环内),宜用stringBuilder.Append()方法,少用字符串+,至于string.F ...

  10. XE系列资源文件的奇怪问题

    这是一个关于资源文件的故事.......-_- 今天写一个功能测试Demo, 为了省事直接在工程文件里Resources And Images里添加了几个图片, 类型都是默认的RCDATA 然后直接就 ...