Get-Process|Get-Member $_
,为什么这不起作用?如果$_
代表管道中的当前对象,上面的输出不应该返回每个进程对象的成员吗?$_
什么时候可以使用变量?创建此变量的条件将更有帮助,而不仅仅是一个 cmdlet 示例来演示$_
.$_
是一个自动变量,可在某些 cmdlet 的脚本块输入中使用,以表示管道中的当前项目。
Get-Process | Get-Member $_
不能因为你送管道对象Get-Member
通过|
,但你再没有任何方式来访问的内部Get-Member
。
你可以这样做:
Get-Process | ForEach-Object {
$_ | Get-Member
}
Run Code Online (Sandbox Code Playgroud)
然后,您将获得由Get-Member
输出的对象集合中的每个项目的输出Get-Process
,尽管这将是多余的,因为每个项目都是相同的。
Cmdlet 会一次一个地将对象发送到管道中。你可以看到这个例子:
Get-Process | ForEach-Object {
$_
Start-Sleep 1
}
Run Code Online (Sandbox Code Playgroud)
通过增加的延迟,您可以看到结果ForEach-Object
一旦可用就会一次到达一个。
您可以使用该$_
变量的其他地方是Where-Object
和Select-Object
。例如:
Get-Process | Where-Object { $_.name -like 'win*' }
Run Code Online (Sandbox Code Playgroud)
此处Where-Object
cmdlet 获取管道的每个项目,我们使用它$_
来访问该项目的 name 属性以查看它是否与 string 类似win
。如果是,则它会继续发送(因此会输出到控制台),如果不是,则Where-Object
丢弃它。
您可以在进行计算属性时使用$_
in Select-Object
。例如:
Get-Process | Select-Object name,@{N='WorkingSetGB';E={$_.WorkingSet / 1GB}}
Run Code Online (Sandbox Code Playgroud)
这里我们使用$_
来获取WorkingSet
每个项目的属性,然后使用 将其转换为 GB 值/ 1GB
。
归档时间: |
|
查看次数: |
825 次 |
最近记录: |