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

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

作者:精品下载站 日期:2024-12-14 04:51:34 浏览:17 分类:玩电脑

PowerShell 在哪里 |了解Where-Object 命令如何工作?


[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

PowerShell 简介,其中

PowerShellWhere-Object cmdlet(别名:where)根据使用管道传递给对象的值来选择或过滤掉对象的特定属性,例如使用名称或用途过滤掉特定进程或过滤掉服务该Where-Object从PowerShell管道获取输入并对其进行处理,它使用比较运算符以及属性值,并且它可以与ScriptBlock或基于比较语句一起使用。

句法

Where-Object 命令的语法。

语法1:

Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Comparision Operator]
[<CommonParameters>]

这里的比较运算符是,

EQ

GT

MATCH

总资产负债表

CEQ

LT

CNE

交联层析法

GE

通用电气工程师协会

LE

化学发光法

Like

克莱克

NotLike

不喜欢

Cmatch

NotMatch

CNotMatch

包含

CContains

NotContains

CNotContains

CIn

NotIn

CNotIn

IsNot

不是

语法2:

Where-Object
[-InputObject <PSObject>]
[-FilterScript] <ScriptBlock>
[<CommonParameters>]

两种语法的通用参数。

Debug (db)

输出变量 (ov)

ErrorAction (ea)

输出缓冲区(ob)

ErrorVariable (ev)

管道变量 (pv)

InformationAction (infa)

冗长 (vb)

InformationVariable (iv)

警告操作 (wa)

警告变量 (wv)

Where-Object 命令在 PowerShell 中如何工作?

PowerShell 中的Where-Object cmdlet 从管道获取输入,并作用于输入对象属性。输入对象可以是由方法和属性组成的对象,也可以是数组。使用 where-object cmdlet 后,它会使用对象的属性以及比较运算符来进行过滤。

有两种方法可以构造Where-Object 命令。

1. 脚本块

在此方法中,我们使用属性名称、比较运算符或逻辑运算符以及属性值来从对象中过滤出数据。 Where-Object 返回特定脚本块语句为 true 的所有对象。

例如,

Get-Process | Where-Object {$_.Name -eq "Chrome"}

2. 比较说明

此功能是在 PowerShell 3.0 中引入的,在此之前,只有 scriptblock 方法。此方法使用自然语言通过提供属性值来过滤对象。

例如,

Get-Process | Where-Object -Property "Name" -EQ -Value "Chrome"

当仅提供属性名称而不提供值时,它将Where-Object 视为布尔表达式。例如,

('Hello','','PowerShell') | Where-Object Length

更多示例将在示例部分中看到。

我们还可以使用‘?’符号来代替Where-Object命令。例如,

Get-Service | ?{$_.StartType -eq 'Disabled'}

我们在Where-Object命令中提供的值不区分大小写,但可以使用以“C”开头的几个运算符(ceq、clike、Ccontains等)来区分大小写。

示例

以下是下面提到的示例

示例 #1 - 使用 -EQ 运算符。

在此示例中,Where-Object 使用 -EQ 运算符来获取处于禁用状态的服务的启动类型。

Get-Service | where{$_.StartType -eq 'Disabled'}

或者

Get-Service | Where-Object -Property Starttype -EQ -Value Disabled

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

示例 #2 - 使用多个比较运算符和逻辑运算符。

我们可以组合多个比较运算符和逻辑运算符,以使用Where-Object命令过滤结果。例如,

Get-Service | Where{($_.StartType -eq 'Manual') -and ($_.Status -eq 'Running')} | Select Name, Starttype, Status

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

示例 #3 - 使用通配符。

我们可以将通配符与 Like 运算符一起使用来获得类似的结果。例如,

获取以“P”开头的服务名称。

Get-Service | where{$_.Name -like 'P*'}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

服务名称以“A”结尾。

Get-Service | where{$_.Name -like '*A'}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

包含“日志”的服务名称。

Get-Service | where{$_.Name -like '*Log*'}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

示例 #4 - 区分大小写。

PowerShell 及其命令不区分大小写,但可以使用一些比较运算符使其区分大小写,并且它们以“C”开头。

Get-Service | where{$_.Name -ceq 'Netlogon'}

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

上面的命令给出了输出,但因为 Netlogon 与服务名称完全匹配,但由于 -CEQ 运算符的名称区分大小写,下面的命令不会生成输出。

Get-Service | where{$_.Name -ceq 'netlogon'}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

示例 #5 - 使用 Length 过滤数组。

考虑我们有以下数组并过滤非空输出,我们可以使用以下命令。

"John","","Alex","" | Where-Object Length -gt 0

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

同样,您也可以过滤文件。

示例 #6 - 使用(大于、小于)运算符。

我们还可以使用一些运算符来进行长度比较。例如,下面的命令将获取所有句柄大于等于 1000 的进程,在下一个示例中,它小于 5000。

Get-Process | ?{$_.Handles -ge 1000}
Get-Process | ?{$_.Handles -lt 1000}

同样,您可以使用运算符 -Gt(大于)、-le(小于等于)来比较整数属性。

示例 #7 - 使用 True 或 False 属性。

在上面的示例中,我们使用了带有属性的 PowerShellWhere-Object 命令,但具有 True 或 False 输出的属性可以直接在 where 命令中使用。我们将看到基于命令和基于脚本块的示例。

Get-Process | where Responding

上面的示例将获取所有正在响应的进程,并且可以使用下面的 scripblock 编写相同的命令。

Get-Process | Where-Object{$_.Responding -eq $true}

对于没有响应的进程,

Get-Process | where -Property Responding -NE $true

使用脚本块,

Get-Process | where{!($_.Responding -eq $true)}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

示例 #8 -Where-Object 与 -Contains 运算符。

要获取对象或数组值,我们可以使用运算符 Contains。例如,以下命令将使用 -Contains 运算符从 Process 输出中进行搜索。

Get-Process | where{$_.Name -contains "Chrome"}

要过滤区分大小写的内容,请使用 -CContains 运算符。

示例#8 - 在没有对象属性的情况下使用Where-Object。

像数组这样的对象没有属性名称,在这种情况下,我们可以使用 $_ 来通过Where-Object 过滤结果,而无需指定属性名称。

"Hello","PowerShell","Azure","Office365" | where{$_ -eq 'PowerShell'}

输出:

[玩转系统] PowerShell 在哪里 |了解Where-Object 命令如何工作?

结论

PowerShell 中的Where-Object 被认为是PowerShell 结果的支柱,因为它可以在几秒或几分钟内从文件或对象中过滤出数千个结果,这有助于Powershell 更快地处理结果。这对于数据处理和内容过滤非常有帮助。

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

取消回复欢迎 发表评论:

关灯