gpt4 book ai didi

windows - 为什么 'Measure-Object -InputObject $foo' 与 PowerShell 中的 '$foo | Measure-Object' 不同?

转载 作者:可可西里 更新时间:2023-11-01 09:43:18 27 4
gpt4 key购买 nike

我在一个目录中有六个 .txt 文件。因此,我创建了一个变量:

$foo = gci -Name *.txt

$foo 现在是一个包含六个字符串的数组。就我而言,我有

PS > $foo
Extensions.txt
find.txt
found_nots.txt
output.txt
proteins.txt
text_files.txt

PS > $foo.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array

PS > $foo.Count
6

我想测量那个物体,所以我将它传递给 Measure-Object :

PS > $foo | Measure-Object

Count : 6
Average :
Sum :
Maximum :
Minimum :
Property :

这正是我所期待的。但是,我也可能像这样传递 $foo:

PS> Measure-Object -InputObject $foo

Count : 1
Average :
Sum :
Maximum :
Minimum :
Property :

这不是我所期待的。这是怎么回事?

最佳答案

当你执行时:

$foo | measure-object

PowerShell 自动展开集合/数组并将每个元素沿管道传递到下一阶段。

当你执行时:

measure-object -inputobject $foo

该 cmdlet 不会在内部展开集合。如果您想在不让 PowerShell 自动展开的情况下检查集合,这通常很有用。顺便说一句,同样的事情适用于 Get-Member。如果您想查看“集合”中的成员而不是每个单独的元素,请执行以下操作:

get-member -inputobject $foo

在管道案例中模拟这一点的一种方法是:

,$foo | Get-Member

这将用一个元素将 foo 中的任何内容(在本例中为集合)包装在另一个集合中。当 PowerShell 自动展开它以将元素发送到管道中时,唯一的元素是 $foo,它被发送到管道中。

关于windows - 为什么 'Measure-Object -InputObject $foo' 与 PowerShell 中的 '$foo | Measure-Object' 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493509/

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