Windows Powershell过滤管道结果

如果要过滤对象可以使用Where-Object;如果要过滤对象的属性,可以使用Select-Object;如果要自定义个性化的过滤效果可以使用ForEach-Object。最后如果想过滤重复的结果,可是使用Get-Uinque。

筛选管道结果中的对象

如果你只对管道结果的特定对象感兴趣,可是使用Where-Object对每个结果进行严格筛选,一旦满足你的标准才会保留,不满足标准的就会自动丢弃。例如你通过Get-service查看运行在机器上的当前服务,但是可能只关心哪些正在运行的服务,这时就可是通过每个服务的属性Status进行过滤。但是前提条件是你得事先知道待处理的对象拥有哪些属性。你可以通过Format-List * ,也可以通过Get-memeber。

PS C:Powershell> Get-service | Select-Object -First 1 | Format-List *

Name        : AdobeARMservice
RequiredServices  : {}
CanPauseAndContinue : False
CanShutdown     : False
CanStop       : True
DisplayName     : Adobe Acrobat Update Service
DependentServices  : {}
MachineName     : .
ServiceName     : AdobeARMservice
ServicesDependedOn : {}
ServiceHandle    :
Status       : Running
ServiceType     : Win32OwnProcess
Site        :
Container      :

PS C:Powershell> Get-service | Select-Object -First 1 | Get-Member -MemberType
Property

  TypeName: System.ServiceProcess.ServiceController

Name        MemberType Definition
----        ---------- ----------
CanPauseAndContinue Property  System.Boolean CanPauseAndContinue {get;}
CanShutdown        Property  System.Boolean CanShutdown {get;}
CanStop            Property  System.Boolean CanStop {get;}
Container           Property  System.ComponentModel.IContainer Container {g...
DependentServices    Property  System.ServiceProcess.ServiceController[] Dep...
DisplayName        Property  System.String DisplayName {get;set;}
MachineName       Property  System.String MachineName {get;set;}
ServiceHandle        Property  System.Runtime.InteropServices.SafeHandle Ser...
ServiceName         Property  System.String ServiceName {get;set;}
ServicesDependedOn  Property  System.ServiceProcess.ServiceController[] Ser...
ServiceType          Property  System.ServiceProcess.ServiceType ServiceType...
Site                Property  System.ComponentModel.ISite Site {get;set;}
Status              Property  System.ServiceProcess.ServiceControllerStatus...

知道了对象有哪些属性,要完成上面提到的需求就很容易了。

PS C:Powershell> get-service | Where-Object {$_.Status -eq "Running"}

Status  Name        DisplayName
------  ----        -----------
Running AdobeARMservice   Adobe Acrobat Update Service
Running AppHostSvc       Application Host Helper Service
Running AppIDSvc      Application Identity
Running Appinfo       Application Information
Running AudioEndpointBu...  Windows Audio Endpoint Builder
Running Audiosrv      Windows Audio
Running BDESVC       BitLocker Drive Encryption Service
Running BFE         Base Filtering Engine
Running BITS        Background Intelligent Transfer Ser...
Running CcmExec       SMS Agent Host

这里稍微解释一下,Where-Object的参数的是一个布尔表达式,$_代表过滤过程中经过管道的当前结果。另外Where-Object还有一个别名 “?” 更形象。

选择对象的属性

包含在每一个对象中的属性可能有很多,但是并不是所有的属性你都感兴趣,这时可以使用Select-Object 限制对象的属性。接下来的例子演示如果获取机器上匿名帐号的完整信息。

PS C:Usersv-bali.FAREAST> Get-WmiObject Win32_UserAccount -filter "LocalAccount=True AND Name='guest'"

AccountType : 512
Caption     : myhomeguest
Domain     : myhome
SID        : S-1-5-21-3064017030-3269374297-2491181182-501
FullName    :
Name    : guest

如果你只对用户名、描述,启用感兴趣。

PS C:Powershell> Get-WmiObject Win32_UserAccount -filter "LocalAccount=True AND
 Name='guest'" | Select-Object Name,Description,Disabled

Name            Description                 Disabled
----              -----------                 --------
guest           Built-in account for gu...           True

Select-Object也支持通配符。

Dir | Select-Object * -exclude *A*
限制对象的数量

列出最后修改的5个文件

PS C:Powershell> Dir | Select-Object -ExcludeProperty "*N*" -First 5

  目录: C:Powershell

Mode        LastWriteTime   Length Name
----        -------------   ------ ----
-a---    2011/11/24   18:30   67580 a.html
-a---    2011/11/24   20:04   26384 a.txt
-a---    2011/11/24   20:26   12060 alias
-a---    2011/11/25   11:20    556 employee.xml
-a---    2011/11/29   19:23   21466 function.ps1

列出占用CPU最大的5个进程

PS C:Powershell> get-process | sort -Descending cpu | select -First 5

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s)  Id ProcessName
------- ------ ----- ----- ----- ------  -- -----------
  1336   98 844304 809388 1081 164.69 3060 iexplore
  224   10 74676 62468  188 81.10 4460 AcroRd32
  130   9 28264 39092  167 70.57 3436 dwm
  169   8  7576 29568  134 65.22 3364 notepad
  989   34 72484 35996  393 62.67 4724 BingDict

逐个处理所有管道结果

如果想对管道结果进行逐个个性化处理可是使用ForEach-Object

ls | ForEach-Object {"文件名: 文件大小(M): " -f $_.Name,$_.Length/1M}
PS C:Powershell> ls | ForEach-Object {"文件名:{0} 文件大小{1}KB: " -f $_.Name,
($_.length/1kb).tostring()}
文件名:a.html 文件大小65.99609375KB:
文件名:a.txt 文件大小25.765625KB:
文件名:alias 文件大小11.77734375KB:
文件名:employee.xml 文件大小0.54296875KB:
文件名:function.ps1 文件大小20.962890625KB:
文件名:LogoTestConfig.xml 文件大小0.181640625KB:
文件名:ls.html 文件大小3.37890625KB:
删除重复对象

Get-Unique可以从已排序的对象列表中删除重复对象。Get-Unique会逐个遍历对象,每次遍历时都会与前一个对象进行比较,如果和前一个对象相等就会抛弃当前对象,否则就保留。所以如果对象列表中没有排序,Get-Unique不能完全发挥作用,只能保证相邻对象不重复。

PS C:Powershell> 1,2,1,2 | Get-Unique
1
2
1
2
PS C:Powershell> 1,2,1,2 | Sort-Object |Get-Unique
1
2
PS C:Powershell> ls | foreach{$_.extension} | Sort-Object |Get-Unique

.bat
.html
.ps1
.txt
.vbs
.xml
(0)

相关推荐

  • Linux base shell重定向详解

    一.标准输入,标准输出与标准错误输出 在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名: 文件 文件描述符 输入文件-标准输入 0(缺省是键盘,为0时是文件或者其他命令的输出) 输出文件-标准输出 1(缺省是屏幕,为1时是文件) 错误输出文件-标准错误 2(缺省是屏幕,为2时是文件)系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9. 标准输入:从键盘输入数据,即从键盘

  • shell常用重定向实例讲解

    每个打开的文件都会被分配一个文件描述符.stdin (键盘), stdout (屏幕), 和 stderr (错误消息输出到屏幕上)的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9. 文件描述符是文件系统为了跟踪这个打开的文件而分配给它的一个数字. 下面以实例说明 1,>的用法 复制代码 代码如下: [zhangy@localhost ~]$ echo "11111" > 1.txt [zhangy@localhost ~]$ cat 1

  • Shell 管道及执行顺序分析

    1.基本概念 a.I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b.常用FD有3个,为0(stdin,标准输入).1(stdout,标准输出).2(stderr,标准错误输出),默认与keyboard.monitor.monitor有关: c.用 < 来改变读进的数据信道(stdin),使之从指定的档案读进: d.用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案: e.0 是 < 的默认值,因此 < 与 0<是一样

  • shell 1>&2 2>&1 &>filename重定向的含义和区别

    当初在shell中, 看到">&1"和">&2"始终不明白什么意思.经过在网上的搜索得以解惑.其实这是两种输出. 在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin) 1 是一个文件描述符,表示标准输出(stdout) 2 是一个文件描述符,表示标准错误(stderr) 在标准情况下, 这些FD分别跟如下设备关联: stdin(0): key

  • php 读取shell管道传输过来的内容

    暮夏,您好! rainbird给您发了短消息: 已经写了不少后台运行的deamon了.用的挺顺手的,但是我现在想获取管道传过来的内容,不知道咋实现,类似echo "aaaa" |a.php,a.php怎么获得echo的内容,不知道您有什么高见. 今天收到一条消息,解决的方法给大家分享一下: 实际上,shell 的 | 实际上表示的是 前一个的 标准输出 作为后一个的标准输入.虽然实现是通过pipe来实现的, 但是你写php代码的时候不需要知道底层的运作.你直接作为标准输入读取就可以了:

  • Shell脚步攻略之管道重定向基础

    1.8.1 匿名管道"|" 管道符号意如其名,类似管道一样将管道入口的数据通过管道传递给管道出口. 管道是为了解决进程间通信问题而存在,它可以让两个进程之间的数据进行传递,将一个进程的输出数据传递给另一个进程作为其输入数据.管道左边是数据给予方,管道右边是数据接收方. 例如echo "abcd" | passwd --stdin username,表示将进程echo的输出结果"abcd"作为进程passwd的输入数据. 基本的管道符号及其用法很容

  • Windows Powershell 管道和重定向

    管道 把上一条命令的输出作为下一条命令的输入. PowerShell管道 例如通过ls获取当前目录的所有文件信息,然后通过Sort -Descending对文件信息按照Name降序排列,最后将排序好的文件的Name和Mode格式化成Table输出. PS C:\PStest> ls | sort -Descending Name | Format-Table Name,Mode Name Mode ---- ---- d.txt -a--- c.txt -a--- b.txt -a--- ABC

  • linux shell 管道命令(pipe)使用及与shell重定向区别

    看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 standard input. 管道命令使用说明: 先看下下面图: comma

  • Windows Powershell过滤管道结果

    如果要过滤对象可以使用Where-Object:如果要过滤对象的属性,可以使用Select-Object:如果要自定义个性化的过滤效果可以使用ForEach-Object.最后如果想过滤重复的结果,可是使用Get-Uinque. 筛选管道结果中的对象 如果你只对管道结果的特定对象感兴趣,可是使用Where-Object对每个结果进行严格筛选,一旦满足你的标准才会保留,不满足标准的就会自动丢弃.例如你通过Get-service查看运行在机器上的当前服务,但是可能只关心哪些正在运行的服务,这时就可是

  • Windows Powershell使用管道

    管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示. 传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.html PS> Get-Content .ls.html Name Length LastWriteT

  • Windows Powershell导出管道结果

    可以将管道的结果转换成文本输出,默认是Out-Default.可以通过Get-Command -verb out查看Powershell都有哪些输出的命令. 复制代码 代码如下: PS C:PowerShell> get-command -Verb out CommandType Name         Definition ----------- ----         ---------- Cmdlet      Out-Default  Out-Default [-InputObjec

  • Windows Powershell Where-Object 条件过滤

    过滤管道结果 使用Get-Process返回所有的当前进程 ,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤.首先得知道每个对象支持那些属性. 复制代码 代码如下: PS C:Powershell> Get-Process | select -First 1 | fl * __NounName                 : Process Name                       : AcroRd32 Handles               

  • Windows Powershell 别名

    简短描述 在Windows PowerShell中, 别名就是cmdlets或其他命令的替代名称. 详细描述 别名就是cmdlet或者命令(例如: 函数, 脚本, 文件, 可执行文件. )的替代名称或者说是个昵称. 在使用命令的地方, 你都可以使用别名. cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然.但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊.能不能把命令缩短一点呢?于是"别名"就应运而生了.Powershell内部也实现了很多

  • Windows PowerShell是啥?看完本文你就懂它了

    引子 一直很羡慕Linux的命令提示符(当然他们叫Shell).正则表达式,管道,各种神奇的命令,组合起来就能高效完成很多复杂的任务.效率实在是高.流了n年的哈喇子以后,终于有幸用上了Win7,邂逅了cmd的升级版:Windows PowerShell.从此暗爽无比,原来Windows下也有这样的利器呀~ 看看下面的Windows脚本,不到15行有效代码.在Win7下只要右击脚本文件,选择Run with PowerShell,就会自动找到最占内存的10个进程,然后将它们占用的内存画成一个三维饼

  • Windows Powershell 自动化变量

    Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

  • Windows Powershell 介绍和安装

    Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershell需要.NET环境的支持,同时支持.NET对象.微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象.其可读性,易用性,可以位居当前所有shell之首. 当前powershell有四版本,分别为1.0,2.0,3.0 ,4.0 如果您的系统是window7或者Windows Ser

  • Windows Powershell属性:描述对象是什么

    属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台.因此可以通过这种方法查看任何对象,例如$host: 复制代码 代码如下: PS C:Powershell> $host Name              : ConsoleHost Version           : 2.0 InstanceId            : 7fefa1fa-fb2e-47c7-a867-c13b123da5c2 UI                : System.

  • Windows PowerShell 微软官方解释

    通过提供一百多种系统管理实用工具.一致的语法.及对普通管理数据更好地导航(如登记或 Windows Management Instrumentation (WMI)),Windows PowerShell 使 Windows 管理员提高了生产力.Windows PowerShell 还包括全面启动 Windows 系统自动化管理任务的脚本编写语言.Windows PowerShell 语言是直观的,并支持贵企业现有的脚本和命令行工具投入.Exchange Server 2007 和 System

随机推荐