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>
由于 $_ 引用当前的管道对象,因此可访问其属性以进行测试。
作为示例,我们可以查看 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基础教程,用户能够掌握如何利用其强大的对象模型和Cmdlet来自动化日常管理任务,提高工作效率。无论你是系统管理员还是开发者,PowerShell都是提升Windows环境管理能力不可或缺的工具。
过滤管道结果 使用Get-Process返回所有的当前进程 ,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤。首先得知道每个对象支持那些属性。 代码如下: PS C:Powershell> Get-Process | ...
9. **Select-Object**:从对象集合中选择特定属性。 10. **Where-Object**:根据条件筛选对象。 11. **ForEach-Object**:对集合中的每个对象执行指定的操作。 12. **Join-Path**:合并路径。 **三、PowerShell高级...
### PowerShell 教程详解 #### 一、PowerShell 概述与重要性 PowerShell 是一个强大的命令行脚本环境,由微软开发并提供支持,主要用于 Windows 系统的管理和自动化任务处理。自 Exchange Server 2007 和 System ...
通过管道运算符(|),用户可以将一个Cmdlet的输出传递给另一个Cmdlet,以实现数据的进一步处理,例如`Get-Process | Sort-Object CPU | Select-Object -First 5`将列出CPU使用率最高的前五个进程。 PowerShell的...
使用Measure-Object和Compare-Object可以统计和对比管道结果。Measure-Object允许指定待统计对象的属性。Compare-Object可以对比对象前后的快照。 统计和计算 使用Measure-Object可以对对象的属性求最小值、最大值、...
- **筛选器**:`Where-Object`和`Select-Object`等命令用于筛选和选择输出中的特定对象。 **4. PowerShell的安全性和权限** - **执行策略**:PowerShell有执行策略设置,限制脚本的运行以防止恶意代码执行。默认...
PowerShell是一种强大的命令行工具和脚本语言,尤其在Windows操作系统环境中被广泛使用。PowerShell 7.2.4是该平台的最新64位版本,相较于早期的PowerShell 5,它带来了许多显著的改进和增强,旨在提高效率、性能和...
--|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....
在Windows操作系统中,PowerShell是一种强大的命令行工具,用于管理和自动化系统任务。它提供了一种交互式的、基于对象的shell,以及一种强大的脚本语言,能够处理复杂的系统管理任务。在处理某些信息时,尤其是查询...
《PowerShell基础教程》深入解析 PowerShell,作为微软推出的一种强大的任务自动化和配置管理框架,自诞生以来便因其高效、灵活的特点,在IT行业迅速占据了重要地位。它不仅能够简化日常管理任务,还提供了丰富的...
Add-Member 命令:向 Windows PowerShell 对象的实例中添加用户定义的自定义成员 --------------------------------------------------------- Add-Member 命令用于向 Windows PowerShell 对象的实例中添加用户定义...
2. **对象管道**: PowerShell的核心是对象管道,它允许用户将命令的输出作为输入传递给下一个命令,类似于Unix的管道,但处理的是对象而非文本。 3. **PowerShell工作区**: 工作区包含了变量、别名、函数等,它们在...
通过上述内容可以看出,这本手册旨在为IT专业人员提供一系列PowerShell的实用技巧和高级功能,涵盖了从基础到进阶的各种知识点,包含变量、运算符、控制流结构、循环、函数等。书中内容可能会包含大量的实例和使用...
【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...
Where-Object 命令用于筛选对象,? 是其常用的别名。该命令可以根据指定的条件来筛选对象,例如,`? {$_.Name -eq "test"}` 将筛选出名称为 "test" 的对象。 Add-Content 命令别名:asnp Add-Content 命令用于向...
兼容性层,使用户能够在隐式Windows PowerShell会话中导入模块 自动新版本通知 直接从PowerShell 7调用DSC资源的能力(实验性) 更重要的一点是,从PowerShell 6.x版本升级到7.0版本,意味着.NET Core从2.x升级到...
例如,你可以使用`Get-Process`获取进程对象,然后通过管道将其传递给`Sort-Object`进行排序,或者使用`Where-Object`过滤出特定条件的进程。 另一个关键特性是PowerShell脚本编写能力。你可以使用PowerShell脚本来...
PowerShell-7.3.7-win-x64
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分区检查 ...