当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 其中对象包含示例

作者:精品下载站 日期:2024-12-14 05:08:08 浏览:14 分类:玩电脑

PowerShell 其中对象包含示例


PowerShell Where-Object cmdlet 允许您根据对象的属性过滤对象。在本 PowerShell 教程中,我们将重点介绍 Where-Object cmdlet 中的 Contains 运算符以及如何使用它。我还将向您展示 PowerShellWhere-Object contains 示例。

在 PowerShell 中,Where-Object cmdlet 通常用于根据对象的属性过滤对象。要检查属于集合(例如数组)的属性是否包含特定值,请使用 -contains 运算符。例如,要查找加载了某个模块的所有进程,您可以使用 Get-Process | Where-Object { $_.Modules -contains ‘ModuleName’ }.

PowerShell 对象包含的位置

Contains 运算符与 PowerShellWhere-Object 一起使用来查找集合中包含特定属性值的对象。请务必注意,Contains 不同于支持通配符比较的 -like 运算符,或使用正则表达式的 -match

Contains 的一个常见用例是当您处理对象的单个属性中的值的集合或数组时。假设您想要查找加载了某个模块的所有进程。你可以这样做:

Get-Process | Where-Object { $_.Modules -Contains 'ModuleName' }

在此示例中,Modules 是一个属性,其中包含每个进程已加载的所有模块的集合。 Contains 运算符检查“ModuleName”是否在该集合中。

这是一个例子:

假设您有一个文件目录,并且您想要查找名称中包含特定字符串的所有文件。您可以在Where-Object 中使用包含包含的过滤器。

Get-ChildItem | Where-Object { $_.Name -Contains 'Report' }

此命令检索当前目录中的所有项目,并根据其名称是否包含字符串“Report”来过滤它们。

在 PowerShell 中的Where-Object 中使用Contains 时,请记住它区分大小写,并且它会在集合中查找完全匹配的内容。如果您需要不区分大小写的搜索或部分匹配,则可能需要考虑使用带有通配符的 -like 或带有正则表达式的 -match

还值得注意的是,ContainsIn 不同,后者检查单个值是否在集合中。语法和用例不同:

'ServiceName' -In (Get-Service).Name

这会检查“ServiceName”是否在所有服务的名称集合中。

PowerShell 其中对象包含字符串

使用 PowerShell 时,您可能需要根据字符串属性是否包含特定子字符串来筛选对象。这就是 Where-Object cmdlet 发挥作用的地方,它允许您筛选对象集合并挑选出符合特定条件的对象。

然而,在将术语“包含”与 Where-Object 一起使用时,存在一个常见的误解。在 PowerShell 中,-contains 运算符用于检查集合(数组)中是否存在值,而不是用于检查字符串属性中的子字符串。要检查对象的字符串属性是否包含特定子字符串,您通常可以使用带有通配符的 -like 运算符,或使用正则表达式的 -match 运算符。

以下是使用 Where-Object-like 运算符在另一个字符串中查找字符串的示例:

Get-Process | Where-Object { $_.ProcessName -like '*notepad*' }

在此示例中,我们过滤 Get-Process 的输出,以仅显示 ProcessName 属性包含子字符串“notepad”的进程。星号 (*) 是通配符,可匹配“记事本”两侧的零个或多个字符。

您可以在下面的屏幕截图中看到输出:

[玩转系统] PowerShell 其中对象包含示例

如果您需要执行不区分大小写的子字符串搜索,则 -like-match 在 PowerShell 中本质上是不区分大小写的。不过,您可以使用 -ccontains-clike-cmatch 运算符进行区分大小写的比较。

例如,使用 -match 在另一个字符串中查找一个字符串:

Get-Service | Where-Object { $_.DisplayName -match 'remote' }

这会将服务过滤到 DisplayName 中包含“remote”的服务。

请务必注意,-match 使用正则表达式,这是功能强大的模式匹配工具,超出了简单的子字符串搜索范围。这可能非常有用,但也需要对正则表达式语法有一定的了解才能有效使用。

总之,当您想要根据字符串属性是否包含特定子字符串来过滤 PowerShell 中的对象时,您应该使用 -like-match,而不是 -包含-contains 运算符适用于集合,而不是字符串。

PowerShell where-object 不包含

在 PowerShell 中,当您想要过滤属性不包含特定值的对象时,您可能会考虑使用“不包含”运算符。但是,PowerShell 没有用于字符串的 -notcontains 运算符。相反,您需要使用 -notlike 运算符或 -notmatch 来否定字符串匹配,这两个运算符都可以与 Where-Object 结合使用 cmdlet。

使用-notlike

-notlike 运算符与 Where-Object 一起使用,以排除字符串属性与指定模式(可以包含通配符)不匹配的对象。这是一个例子:

Get-Service | Where-Object { $_.DisplayName -notlike '*SQL*' }

此命令将返回 DisplayName 不包含子字符串“SQL”的所有服务。

使用-notmatch

或者,-notmatch 使用正则表达式进行模式匹配,并可用于执行更复杂的否定:

Get-Process | Where-Object { $_.ProcessName -notmatch '^conhost$' }

上述命令将返回 ProcessName 与“conhost”不完全匹配的进程列表。 ^$ 分别是字符串开头和结尾的正则表达式锚点。

处理集合

如果您处理的是集合(数组)属性,并且想要排除集合中包含特定值的对象,则可以使用 -notcontains。这是 PowerShell 中 -notcontains 的正确用法:

$myArray = 'apple', 'banana', 'cherry'
$myArray -notcontains 'orange' # This returns True because 'orange' is not in the array

但是,当使用 Where-Object 进行过滤时,您将执行如下操作:

$myObjects | Where-Object { $_.SomeCollectionProperty -notcontains 'SomeValue' }

在此示例中,$myObjects 是一个对象集合,每个对象都有一个属性 SomeCollectionProperty,该属性本身就是一个集合。 -notcontains 运算符用于过滤掉 SomeCollectionProperty 不包含“SomeValue”的对象。

当您想要根据字符串属性中是否存在子字符串来过滤对象时,应将 -notlike-notmatchWhere-Object结合使用> 在 PowerShell 中。处理集合属性时,如果您想要排除集合中包含特定值的对象,则可以使用 -notcontains

PowerShell where-object 不包含

在 PowerShell 中,当您需要根据集合属性(例如数组)中是否缺少特定值来过滤对象时,可以将 -notcontains 运算符与 Where 结合使用-Object PowerShell 中的 cmdlet。但是,如果您要检查字符串属性是否不包含特定子字符串,则需要使用 -notlike-notmatch 运算符,如 -notcontains 不适用于字符串包含检查。

对字符串使用 -notlike

-notlike 运算符用于字符串比较,您希望返回与特定模式不匹配的对象。此模式可以包含通配符,例如星号 (*),它代表任意数量的字符。这是一个例子:

Get-ChildItem | Where-Object { $_.Name -notlike '*temp*' }

此命令将返回 Name 属性不包含子字符串“temp”的所有项目。

对字符串使用 -notmatch

-notmatch 运算符使用正则表达式进行模式匹配,用于排除字符串属性与指定正则表达式模式匹配的对象。这是一个例子:

Get-Process | Where-Object { $_.ProcessName -notmatch 'chrome' }

此命令将返回ProcessName 不包含子字符串“chrome”的所有进程。

对集合使用 -notcontains

处理集合属性时,-notcontains 运算符是合适的。它检查集合是否不包含特定值。例如:

$fruitList = 'apple', 'banana', 'cherry'
$fruitList -notcontains 'grape' # This returns True because 'grape' is not in the list

Where-Object 上下文中,您可以使用 -notcontains 过滤掉集合类型属性不包含特定值的对象:

$myObjects | Where-Object { $_.FruitList -notcontains 'grape' }

在此示例中,$myObjects 可能是一个对象集合,每个对象都有一个属性 FruitList,该属性是表示水果的字符串集合。 -notcontains 运算符用于仅返回 FruitList 不包含字符串“grape”的对象。

当您想要在 PowerShell 中过滤掉字符串属性不包含特定子字符串的对象时,您应该使用 -notlike-notmatch。当您需要根据集合属性中缺少值来排除对象时,请使用 -notcontains

PowerShell where-object 包含示例

让我们看一下与 PowerShell where-object contains 相关的两个示例。

示例 1:使用 -contains 过滤数组

假设您有一个数字数组,并且您想找出该数组是否包含特定数字:

$numbers = 1, 2, 3, 4, 5
$numbers -contains 3

这将返回 True,因为数字 3 在数组 $numbers 中。

示例 2:过滤具有包含特定值的属性的对象

如果您有一个带有数组属性的自定义对象,并且您希望根据数组是否包含特定值来过滤这些对象,则可以在 Where- 中使用 -contains对象像这样的块:

$myObjects | Where-Object { $_.PropertyArray -contains 'Value' }

在此示例中,$myObjects 可能是对象的集合,而 PropertyArray 是这些对象的属性,它是一个数组。该命令过滤 PropertyArray 包含字符串“Value”的对象。

结论

带有 Contains 运算符的 Where-Object cmdlet 在 PowerShell 中非常有用,可根据对象的属性内容过滤对象。 此外,我们还讨论了以下主题:

  • PowerShell 对象包含位置
  • PowerShell 其中对象包含字符串
  • PowerShell where-object 不包含
  • PowerShell where-object 不包含
  • PowerShell where-object 包含示例

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯