`

PowerShell基础教程(15)——从管道中删除对象 (Where-Object)

阅读更多

PowerShell基础教程(15)——从管道中删除对象 (Where-Object)             <o:p></o:p>

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

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

使用 Where-Object 执行简单测试<o:p></o:p>

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

<!----><!----><!---->请注意: <o:p></o:p>

默认情况下在处理文本时Windows PowerShell 比较运算符不区分大小写。 <o:p></o:p>

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

<o:p> </o:p>

比较运算符<o:p></o:p>

含义<o:p></o:p>

示例返回 True<o:p></o:p>

-eq<o:p></o:p>

等于<o:p></o:p>

1 -eq 1<o:p></o:p>

-ne<o:p></o:p>

不等于<o:p></o:p>

1 -ne 2<o:p></o:p>

-lt<o:p></o:p>

小于<o:p></o:p>

1 -lt 2<o:p></o:p>

-le<o:p></o:p>

小于或等于<o:p></o:p>

1 -le 2<o:p></o:p>

-gt<o:p></o:p>

大于<o:p></o:p>

2 -gt 1<o:p></o:p>

-ge<o:p></o:p>

大于或等于<o:p></o:p>

2 -ge 1<o:p></o:p>

-like<o:p></o:p>

类似(用于文本的通配符比较)<o:p></o:p>

"file.doc" -like "f*.do?"<o:p></o:p>

-notlike<o:p></o:p>

不类似(用于文本的通配符比较)<o:p></o:p>

"file.doc" -notlike "p*.doc"<o:p></o:p>

-contains<o:p></o:p>

包含<o:p></o:p>

1,2,3 -contains 1<o:p></o:p>

-notcontains<o:p></o:p>

不包含<o:p></o:p>

1,2,3 -notcontains 4<o:p></o:p>

<o:p> </o:p>

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

PS> 1,2,3,4 | Where-Object -FilterScript {$_ -lt 3}<o:p></o:p>

1<o:p></o:p>

2<o:p></o:p>

<o:p> </o:p>

根据对象属性进行筛选<o:p></o:p>

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

作为示例我们可以查看 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"}<o:p></o:p>

<o:p> </o:p>

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

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

<o:p> </o:p>

DisplayName :RAS Asynchronous Media Driver<o:p></o:p>

Name        :AsyncMac<o:p></o:p>

State       :Running<o:p></o:p>

Status      :OK<o:p></o:p>

Started     :True<o:p></o:p>

<o:p> </o:p>

DisplayName :Audio Stub Driver<o:p></o:p>

Name        :audstub<o:p></o:p>

State       :Running<o:p></o:p>

Status      :OK<o:p></o:p>

Started     :True<o:p></o:p>

<o:p> </o:p>

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

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

<o:p> </o:p>

Name                                    DisplayName<o:p></o:p>

----                                    -----------<o:p></o:p>

AsyncMac                                RAS Asynchronous Media Driver<o:p></o:p>

Fdc                                     Floppy Disk Controller Driver<o:p></o:p>

Flpydisk                                Floppy Disk Driver<o:p></o:p>

Gpc                                     Generic Packet Classifier<o:p></o:p>

IpNat                                   IP Network Address Translator<o:p></o:p>

mouhid                                  Mouse HID Driver<o:p></o:p>

MRxDAV                                  WebDav Client Redirector<o:p></o:p>

mssmbios                                Microsoft System Management BIOS Driver<o:p></o:p>

<o:p> </o:p>

上述命令中存在两个 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<o:p></o:p>

<o:p> </o:p>

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

<o:p> </o:p>

逻辑运算符<o:p></o:p>

含义<o:p></o:p>

示例返回 True<o:p></o:p>

-and<o:p></o:p>

逻辑与;两边都为 True 时值为 True<o:p></o:p>

(1 -eq 1) -and (2 -eq 2)<o:p></o:p>

-or<o:p></o:p>

逻辑或;其中一边为 True 时值为 True <o:p></o:p>

(1 -eq 1) -or (1 -eq 2)<o:p></o:p>

-not<o:p></o:p>

逻辑非;对 True False 取反<o:p></o:p>

-not (1 -eq 2)<o:p></o:p>

!<o:p></o:p>

逻辑非;对 True False 取反<o:p></o:p>

!(1 -eq 2)<o:p></o:p>

 
分享到:
评论

相关推荐

    Windows Powershell Where-Object 条件过滤

    过滤管道结果 使用Get-Process返回所有的当前进程 ,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤。首先得知道每个对象支持那些属性。 代码如下: PS C:Powershell&gt; Get-Process | ...

    PowerShell基础教程.doc

    ◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用...

    Windows Powershell分析和比较管道结果

    使用Measure-Object和Compare-Object可以统计和对比管道结果。Measure-Object允许指定待统计对象的属性。Compare-Object可以对比对象前后的快照。 统计和计算 使用Measure-Object可以对对象的属性求最小值、最大值、...

    Windows PowerShell教程合集

    --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....

    OpenSSH(允许Windows通过SSH方式访问)

    该软件基于OpenSSH修改。 安装该软件后可以使用SSH方式访问Windows服务器,用户名密码不变。 该软件在Windows Server 2012 R2 Standard版本下测试通过。 如果安装过程中提示没有权限,请以管理员身份运行。

    powershell教程

    powershell学习教程,powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程

    PowerShell-7.0.0-win-x64.msi

    兼容性层,使用户能够在隐式Windows PowerShell会话中导入模块 自动新版本通知 直接从PowerShell 7调用DSC资源的能力(实验性) 更重要的一点是,从PowerShell 6.x版本升级到7.0版本,意味着.NET Core从2.x升级到...

    操作系统安全:常用的PowerShell命令.pptx

    在Windows 7中内置了PowerShell2.0, Windows 8中内置了PowerShell3.0。如果本机没有添加,可在网上下载安装包进行安装,或者下载WebPI,通过WebPI安装PowerShell。; 为防止恶意脚本的执行,PowerShell有一个执行策略...

    精通windows server 2008 命令行与powershell电子书PDF版(第一卷)

    1.2.9 where——位置 47 第2章 磁盘管理 49 2.1 磁盘分区与格式化 49 2.1.1 硬盘分区 49 2.1.2 磁盘格式化 51 2.1.3 Windows Server 2008系统分区 52 2.1.4 format——磁盘格式化 53 2.1.5 chkntfs——NTFS分区检查 ...

    精通windows server 2008 命令行与powershell 电子书PDF单文件完整版

    1.2.9 where——位置 47 第2章 磁盘管理 49 2.1 磁盘分区与格式化 49 2.1.1 硬盘分区 49 2.1.2 磁盘格式化 51 2.1.3 Windows Server 2008系统分区 52 2.1.4 format——磁盘格式化 53 2.1.5 chkntfs——NTFS分区检查 ...

    PowerShell-7.0.0-win-x64.zip

    PowerShell Core使用率在过去两年中显著增长。特别是,我们的大部分增长来自Linux平台,这是一个令人鼓舞的统计数据,因为我们致力于PowerShell可行的跨平台...... 但是,我们也可以清楚地看到,由于PowerShell在...

    精通windows server 2008 命令行与powershell电子书PDF版(第二卷)

    1.2.9 where——位置 47 第2章 磁盘管理 49 2.1 磁盘分区与格式化 49 2.1.1 硬盘分区 49 2.1.2 磁盘格式化 51 2.1.3 Windows Server 2008系统分区 52 2.1.4 format——磁盘格式化 53 2.1.5 chkntfs——NTFS分区检查 ...

    PowerShell-7.2.6-win-x64.msi

    PowerShell-7.2.6-win-x64 Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。

    Powershell 实例教程

    Powershell 实例教程 Powershell 实例教程Powershell 实例教程

    PowerShell v7.2.4 最新64位安装包 PowerShell-7.2.4-win-x64.msi

    PowerShell 7相比 PowerShell 5有较大程度的改进。附上最新版的安装包,因为直接从Github下是很慢的。百度的离线下载也不能用。放在这里以备不时之需。方便大家。

    精通windows server 2008 命令行与powershell电子书PDF版(第三卷)

    1.2.9 where——位置 47 第2章 磁盘管理 49 2.1 磁盘分区与格式化 49 2.1.1 硬盘分区 49 2.1.2 磁盘格式化 51 2.1.3 Windows Server 2008系统分区 52 2.1.4 format——磁盘格式化 53 2.1.5 chkntfs——NTFS分区检查 ...

    精通windows server 2008 命令行与powershell 电子书PDF版(第四卷)

    1.2.9 where——位置 47 第2章 磁盘管理 49 2.1 磁盘分区与格式化 49 2.1.1 硬盘分区 49 2.1.2 磁盘格式化 51 2.1.3 Windows Server 2008系统分区 52 2.1.4 format——磁盘格式化 53 2.1.5 chkntfs——NTFS分区检查 ...

    PowerShell-7.0.0-preview.4-win-x64.msi

    Make ForEach-Object faster for its commonly used scenarios (#10454) and fix ForEach-Object -Parallel performance problem with many runspaces (#10455) Experimental Features Update ...

    PowerShell-7.0.0-preview.4-win-x64.zip

    解压后如果需要替换win+a中的powershell,只需要拷贝安装目录至%windir%\System32\WindowsPowerShell,重命名v1.0,将安装的新版本复制至新建的v1.0文件夹内,复制pwsh.exe为powershell.exe即可;微软希望所有平台...

    PowerShell基础教程

    PowerShell基础教程,需要的请下载

Global site tag (gtag.js) - Google Analytics