在 Windows PowerShell 中,与所需的对象数量相比,通常生成的对象数量以及要传递给管道的对象数量要多得多。可以使用 Format cmdlet 来指定要显示的特定对象的属性,但这并不能帮您解决从显示中删除整个对象的问题。您可能希望在管道结束之前筛选对象,因此只能在最初生成的对象子集上执行操作。

利用 Windows PowerShell 中的 Where-Object cmdlet,可以测试管道中的所有对象,并将符合特定测试条件的对象通过管道进行传递。没有通过测试的对象将从管道中删除。可以将测试条件设置为 Where-ObjectFilterScript 参数的值。

使用 Where-Object 执行简单测试

FilterScript 的值为计算结果为 True 或 False 的脚本块(由大括号 {} 括住的一个或多个 Windows PowerShell 命令)。这些脚本块非常简单,但创建这些脚本块则需要了解 Windows PowerShell 的另一概念,即,比较运算符。比较运算符可比较该运算符两侧的项。比较运算符以“-”字符开头,后跟名称。基本的比较运算符几乎对所有类型的对象适用。更高级的比较运算符只适用于文本或数组。

请注意:

默认情况下,在处理文本时,Windows PowerShell 比较运算符不区分大小写。

出于分析方面的考虑,诸如 <、> 和 = 之类的符号不能用作比较运算符。因此,比较运算符改由字母组成。基本的比较运算符如下表所示:

比较运算符

含义

示例返回 True

-eq

等于

1 -eq 1

-ne

不等于

1 -ne 2

-lt

小于

1 -lt 2

-le

小于或等于

1 -le 2

-gt

大于

2 -gt 1

-ge

大于或等于

2 -ge 1

-like

类似(用于文本的通配符比较)

"file.doc" -like "f*.do?"

-notlike

不类似(用于文本的通配符比较)

"file.doc" -notlike "p*.doc"

-contains

包含

1,2,3 -contains 1

-notcontains

不包含

1,2,3 -notcontains 4

Where-Object 脚本块使用特殊的变量“$_”来引用管道中的当前对象。此处的示例将演示该变量的工作原理。如果存在一个数字列表,而您只需返回小于 3 的数字,则可通过键入以下命令来使用 Where-Object 筛选数字:

PS> 1,2,3,4 | Where-Object -FilterScript {$_ -lt 3}

1

2

根据对象属性进行筛选

由于 $_ 引用当前的管道对象,因此可访问其属性以进行测试。

作为示例,我们可以查看 WMI 中的 Win32_SystemDriver 类。特定系统中可能存在几百个系统驱动程序,而您可能只对某一组特定的系统驱动程序感兴趣,例如。当前正在运行的那些系统驱动程序。如果使用 Get-Member 来查看Win32_SystemDriver 成员(Get-WmiObject -Class Win32_SystemDriver | Get-Member -MemberType Property),则将看到的相关属性是“State”,并且该驱动程序运行时,它具有值“Running”。键入以下命令可以只选择正在运行的系统驱动程序以进行筛选操作:

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"}

这仍会生成一个很长的列表。您可能还希望通过测试 StartMode 值来进行筛选,以便只选择设置为自动启动的驱动程序:

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Auto"}

DisplayName :RAS Asynchronous Media Driver

Name        :AsyncMac

State       :Running

Status      :OK

Started     :True

DisplayName :Audio Stub Driver

Name        :audstub

State       :Running

Status      :OK

Started     :True

由于我们已了解哪些驱动程序正在运行,因此这将产生许多我们不再需要的信息。实际上,此时我们可能需要的信息仅仅是名称和显示名称。以下命令只包括这两个属性,从而得到更简单的输出:

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Manual"} | Format-Table -Property Name,DisplayName

Name                                    DisplayName

----                                    -----------

AsyncMac                                RAS Asynchronous Media Driver

Fdc                                     Floppy Disk Controller Driver

Flpydisk                                Floppy Disk Driver

Gpc                                     Generic Packet Classifier

IpNat                                   IP Network Address Translator

mouhid                                  Mouse HID Driver

MRxDAV                                  WebDav Client Redirector

mssmbios                                Microsoft System Management BIOS Driver

上述命令中存在两个 Where-Object 元素,而他们可通过使用 –and 逻辑运算符,以单个 Where-Object 元素的形式表示出来,如下所示:

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State -eq "Running") -and ($_.StartMode -eq "Manual") } | Format-Table -Property Name,DisplayName

标准的逻辑运算符如下表所示:

逻辑运算符

含义

示例返回 True

-and

逻辑与;两边都为 True 时值为 True

(1 -eq 1) -and (2 -eq 2)

-or

逻辑或;其中一边为 True 时值为 True

(1 -eq 1) -or (1 -eq 2)

-not

逻辑非;对 True 和 False 取反

-not (1 -eq 2)

!

逻辑非;对 True 和 False 取反

!(1 -eq 2)

说明 :此文借鉴csdn博客erway的博客PowerShell基础教程(15)——从管道中删除对象 (Where-Object)一文

Powershell对象条件查询筛选的更多相关文章

  1. pymongo增删查改以及条件查询

    ---恢复内容开始--- 下载Pymongo pip install pymongo pip install pymongo==x.x.x指定下载版本 连接数据库 from pymongo impor ...

  2. jqgrid 表格中筛选条件的多选下拉,树形下拉 ;文本框清除插件;高级查询多条件动态筛选插件[自主开发]

    /** * @@desc 文本框清除按钮,如果isAutoWrap为false当前文本框父级必须是relative定位,boostrap参考input-group * @@author Bear.Ti ...

  3. ThinkPHP中 按条件查询后列表显示

    最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign ...

  4. Mybatis-技术专区-Criteria的and和or进行联合条件查询

    之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用.在我们前台查询的时候会有许多的 ...

  5. 基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的处理

    在做一些常规应用的时候,我们往往需要确定条件的内容,以便在后台进行区分的进行精确查询,在移动端,由于受限于屏幕界面的情况,一般会对多个指定的条件进行模糊的搜索,而这个搜索的处理,也是和前者强类型的条件 ...

  6. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  7. [NHibernate]条件查询Criteria Query

    目录 写在前面 文档与系列文章 条件查询 一个例子 总结 写在前面 上篇文章介绍了HQL查询,我个人觉得使用ORM框架就是为了让少些sql,提高开发效率,而再使用HQL就好像还是使用sql,就觉得有点 ...

  8. PHP-----练习-------租房子-----增删改查,多条件查询

    练习-------租房子-----增删改查,多条件 一 .题目要求: 二 .做法: [1]建立数据库 [2]封装类文件------DBDA.class.php <?php class DBDA ...

  9. EasyUI ComboGrid的绑定,上下键和回车事件,输入条件查询

    首先我们先看一下前台的绑定事件 1.先定义标签 <input id="cmbXm" type="text" style="width: 100p ...

随机推荐

  1. Bootstrap导航栏实例讲解

    导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏是响应式元组件就,作为应用程序或网站的导航标题.导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开. ...

  2. LATEX中优化问题如何排列Max——s.t.格式

    做优化的同学可能会碰到排列形如 max    ******* s.t.   ***** = *        ***** > ***        ...    的格式 既要要求 max 和 s ...

  3. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  4. python中在ubuntu中安装虚拟环境及环境配置

    python中在ubuntu中安装虚拟环境及环境配置 1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install ...

  5. javascript设置首页,加入收藏

    <a href="javascript:;" id="setHomePage" class="toolsbar" onclick=&q ...

  6. MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表

    Messages表: mysql>create table Messages( ->message_id int auto_increment primary key, ->user ...

  7. iOS设备定位服务开启判定

    应用CLLocationManager 的两个方法 [CLLocationManagerlocationServicesEnabled] 判断设备是否开启定位功能 [CLLocationManager ...

  8. 算法笔记_086:蓝桥杯练习 9-2 文本加密(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 先编写函数EncryptChar,按照下述规则将给定的字符c转化(加密)为新的字符:"A"转化"B" ...

  9. VScode eslint-plugin-vue 自动修复eslint报错

    1.安装插件 npm i -g eslint-plugin-vue 2.修改项目跟路径下的文件:.eslintrc | .eslint.js 3.添加eslint 和 vetur 插件 4.修改vsc ...

  10. openSession() 与 getCurrentSession() 有何不同和关联呢?

    在 SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在getCurrentSession() 被调用的时候,实际被执 ...