`

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>

 
分享到:
评论

相关推荐

    PowerShell基础教程.doc

    通过学习PowerShell基础教程,用户能够掌握如何利用其强大的对象模型和Cmdlet来自动化日常管理任务,提高工作效率。无论你是系统管理员还是开发者,PowerShell都是提升Windows环境管理能力不可或缺的工具。

    Windows Powershell Where-Object 条件过滤

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

    PowerShell基本语法及常用命令(中文)

    9. **Select-Object**:从对象集合中选择特定属性。 10. **Where-Object**:根据条件筛选对象。 11. **ForEach-Object**:对集合中的每个对象执行指定的操作。 12. **Join-Path**:合并路径。 **三、PowerShell高级...

    powershell教程

    ### PowerShell 教程详解 #### 一、PowerShell 概述与重要性 PowerShell 是一个强大的命令行脚本环境,由微软开发并提供支持,主要用于 Windows 系统的管理和自动化任务处理。自 Exchange Server 2007 和 System ...

    经典PowerShell入门教程.docx

    通过管道运算符(|),用户可以将一个Cmdlet的输出传递给另一个Cmdlet,以实现数据的进一步处理,例如`Get-Process | Sort-Object CPU | Select-Object -First 5`将列出CPU使用率最高的前五个进程。 PowerShell的...

    Windows Powershell分析和比较管道结果

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

    Windows Powershell - EN.pdf

    - **筛选器**:`Where-Object`和`Select-Object`等命令用于筛选和选择输出中的特定对象。 **4. PowerShell的安全性和权限** - **执行策略**:PowerShell有执行策略设置,限制脚本的运行以防止恶意代码执行。默认...

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

    PowerShell是一种强大的命令行工具和脚本语言,尤其在Windows操作系统环境中被广泛使用。PowerShell 7.2.4是该平台的最新64位版本,相较于早期的PowerShell 5,它带来了许多显著的改进和增强,旨在提高效率、性能和...

    PowerShell-7.0.0-win-x64.msi

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

    Windows PowerShell教程合集

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

    powershell显示详细信息.docx

    在Windows操作系统中,PowerShell是一种强大的命令行工具,用于管理和自动化系统任务。它提供了一种交互式的、基于对象的shell,以及一种强大的脚本语言,能够处理复杂的系统管理任务。在处理某些信息时,尤其是查询...

    PowerShell基础教程

    《PowerShell基础教程》深入解析 PowerShell,作为微软推出的一种强大的任务自动化和配置管理框架,自诞生以来便因其高效、灵活的特点,在IT行业迅速占据了重要地位。它不仅能够简化日常管理任务,还提供了丰富的...

    powershell命令集(有中文说明).docx

    Add-Member 命令:向 Windows PowerShell 对象的实例中添加用户定义的自定义成员 --------------------------------------------------------- Add-Member 命令用于向 Windows PowerShell 对象的实例中添加用户定义...

    PowerShell教程

    2. **对象管道**: PowerShell的核心是对象管道,它允许用户将命令的输出作为输入传递给下一个命令,类似于Unix的管道,但处理的是对象而非文本。 3. **PowerShell工作区**: 工作区包含了变量、别名、函数等,它们在...

    PowerShell-7.5.0-win-x64.exe

    PowerShell-7.5.0-win-x64.exe

    PowerShell-7.1.0-win-x64

    3. **管道机制**:PowerShell中的管道允许将一个命令的输出作为另一个命令的输入,类似Unix/Linux的管道功能,但更加强大,因为它是基于对象的。 4. **脚本编写能力**:PowerShell支持使用PowerShell Scripting ...

    PowerShell notes for professionals.pdf

    通过上述内容可以看出,这本手册旨在为IT专业人员提供一系列PowerShell的实用技巧和高级功能,涵盖了从基础到进阶的各种知识点,包含变量、运算符、控制流结构、循环、函数等。书中内容可能会包含大量的实例和使用...

    PowerShell 基础教程

    【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...

    PowerShell-7.3.7-win-x64

    PowerShell-7.3.7-win-x64

    PowerShell 常见命令别名及其作用

    Where-Object 命令用于筛选对象,? 是其常用的别名。该命令可以根据指定的条件来筛选对象,例如,`? {$_.Name -eq "test"}` 将筛选出名称为 "test" 的对象。 Add-Content 命令别名:asnp Add-Content 命令用于向...

Global site tag (gtag.js) - Google Analytics