转至: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. (转)如何将数据库从SQL Server迁移到MySQL

    一.迁移Database Schema. 首 先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择“F ...

  2. SBT Assembly - Deduplicate error & Exclude error

    sbt assembly java.lang.RuntimeException: deduplicate: different file contents found in the following ...

  3. hdu-acm steps 免费馅饼

    /*dp入门级的题目,和数塔是一样的,这道题不用做什么优化,感觉时间复杂度不会超.主要还是细节上的问题, 这道题的状态和状态方程都容易找到,采用自底向上的方式会好很多*/ #include" ...

  4. JS(javascript) 将网站加入收藏夹

    | 浏览:688 | 更新:2014-09-20 19:39 1 2 3 分步阅读 将网站网址加入收藏夹,方便下次访问! 工具/原料 网址: 电脑. 方法/步骤   //创建加入收藏夹JS函数 < ...

  5. wa~哭笑天使

    #include <stdio.h> #define M 301 int r[M], c[M]; int main() { int k, m, n, i, j, sum, flag, t; ...

  6. JS判断客户端系统 让ipad iphone 等手持设备自动跳到手机版

    if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))) { location.replace("http:// ...

  7. ExtJS4笔记 Data

    The data package is what loads and saves all of the data in your application and consists of 41 clas ...

  8. nba技能表

    球员名 主动技能名 主动技能效果 拆解技能名 拆解技能效果 巅峰-纳什 跑投三分 全队三分出手概率提高X%,但体力消耗增加Y% 稳固进攻 全队进攻增加X%,持续整场比赛 巅峰-科比 肉搏 对方全体行动 ...

  9. UML聚合与组合

    http://www.cnblogs.com/shanwenbin/archive/2012/10/24/2737229.html UML聚合与组合 2012-10-24 15:35 by DayDa ...

  10. Json 、 Jsonp

    SONP is simply a hack to allow web apps to retrieve data across domains. It could be said that it vi ...