gpt4 book ai didi

powershell - 管道和 $_ 在 PowerShell 中如何工作?

转载 作者:行者123 更新时间:2023-12-03 01:24:02 25 4
gpt4 key购买 nike

  1. Get-Process|Get-Member $_,为什么这不起作用?如果 $_ 表示管道中的当前对象,那么上面的输出不应该返回每个流程对象的成员吗?
  2. cmdlet 是否会将其所有输出对象一次性传送到下一个 cmdlet,或者当有可用对象时?
  3. 由于#1 不起作用,我什么时候可以使用 $_ 变量?创建此变量的条件将比仅使用 cmdlet 示例来演示 $_ 的使用更有帮助。

最佳答案

$_ 是一个自动变量,可在某些 cmdlet 的脚本 block 输入中使用,以表示管道中的当前项目。

获取进程| Get-Member $_ 不起作用,因为您通过 | 将管道对象发送到 Get-Member,但随后您没有任何对象访问 Get-Member 内部的方法。

你可以这样做:

Get-Process | ForEach-Object {
$_ | Get-Member
}

然后,您将获得 Get-Process 输出的对象集合中的每个项目的 Get-Member 输出,尽管这会是多余的,因为每个项目都是一样。

Cmdlet 确实一次将一个对象沿着管道发送一个。您可以通过以下示例看到这一点:

Get-Process | ForEach-Object {
$_
Start-Sleep 1
}

您可以看到,随着延迟的增加,结果一旦可用,就会一次一个地到达 ForEach-Object

其他可以使用$_变量的地方是Where-ObjectSelect-Object。例如:

Get-Process | Where-Object { $_.name -like 'win*' }

这里 Where-Object cmdlet 正在获取管道的每个项目,我们使用 $_ 访问该项目的 name 属性以查看它是否类似于字符串win。如果是,则它会继续发送(因此会输出到控制台),如果不是,Where-Object 会丢弃它。

在计算属性时,您可以在 Select-Object 中使用 $_。例如:

Get-Process | Select-Object name,@{N='WorkingSetGB';E={$_.WorkingSet / 1GB}}

这里我们使用$_获取每个项目的WorkingSet属性,然后使用/1GB将其转换为GB值.

关于powershell - 管道和 $_ 在 PowerShell 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com