Powershell对象条件查询筛选
在 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对象条件查询筛选的更多相关文章
- pymongo增删查改以及条件查询
---恢复内容开始--- 下载Pymongo pip install pymongo pip install pymongo==x.x.x指定下载版本 连接数据库 from pymongo impor ...
- jqgrid 表格中筛选条件的多选下拉,树形下拉 ;文本框清除插件;高级查询多条件动态筛选插件[自主开发]
/** * @@desc 文本框清除按钮,如果isAutoWrap为false当前文本框父级必须是relative定位,boostrap参考input-group * @@author Bear.Ti ...
- ThinkPHP中 按条件查询后列表显示
最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign ...
- Mybatis-技术专区-Criteria的and和or进行联合条件查询
之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用.在我们前台查询的时候会有许多的 ...
- 基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的处理
在做一些常规应用的时候,我们往往需要确定条件的内容,以便在后台进行区分的进行精确查询,在移动端,由于受限于屏幕界面的情况,一般会对多个指定的条件进行模糊的搜索,而这个搜索的处理,也是和前者强类型的条件 ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- [NHibernate]条件查询Criteria Query
目录 写在前面 文档与系列文章 条件查询 一个例子 总结 写在前面 上篇文章介绍了HQL查询,我个人觉得使用ORM框架就是为了让少些sql,提高开发效率,而再使用HQL就好像还是使用sql,就觉得有点 ...
- PHP-----练习-------租房子-----增删改查,多条件查询
练习-------租房子-----增删改查,多条件 一 .题目要求: 二 .做法: [1]建立数据库 [2]封装类文件------DBDA.class.php <?php class DBDA ...
- EasyUI ComboGrid的绑定,上下键和回车事件,输入条件查询
首先我们先看一下前台的绑定事件 1.先定义标签 <input id="cmbXm" type="text" style="width: 100p ...
随机推荐
- java正則表達式 match、find匹配位置
如题.对于java正則表達式这几个方法匹配一次后的,匹配位置搞不太清楚,就写了几个样例.例如以下: String ss="ooaaoo"; Pattern pt=Pattern.c ...
- jQuery匹配各种条件的选择器用法
:hidden匹配所有的不可见元素,input 元素的 type 属性为 "hidden" 的话也会被匹配到Matches all elements that are hidden ...
- Apache的Order Allow,Deny详解
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...
- 格雷码C++递归实现
昨天参加腾讯的笔试,结果答的一塌糊涂,大题第一题是关于格雷码的递归实现的,当时没写出来,今天查了下资料试着用C++实现一下. #include <iostream> #include &l ...
- 使用虚拟机运行Ubuntu时,主机与宿主机共享文件的方法。
简介: 首先设置虚拟机: 虚拟机 -> 设置-> Hardware -> Network Adapter,在网络连接处设置为 “桥接:直接连接到物理网络”,“NAT:使用已共享的主机 ...
- Item 33: 避免覆盖(hiding)“通过继承得到的名字”
莎士比亚有一个关于名字的说法."What's in a name?" 他问道,"A rose by any other name would smell as sweet ...
- Windows最常用的8个网络CMD命令总结
一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP ...
- [Android-Demo]Android View的拖动
↑ 请善用目录 Demo下载地址:http://download.csdn.net/detail/u011634756/5959637 (免积分哦~) ------------------------ ...
- 寻找i*j=m的个数
问题描述 3*3的矩阵内容. 1 2 3 2 4 6 3 6 9 即a[i][j](1<=i<=n,1<=j<=n)=i*j. 问一个这样n*n的矩阵里面,里面m出现的次数. ...
- windows 下apache 以fastcgi形式执行php
以xampp为例解说,过程例如以下: 1:下载相应的mod_fastcgi .下载參考站点:http://www.apachelounge.com/download/VC11/ 2:拷贝mod_fas ...