我在目录中有六个.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 :
这不是我所期待的。这是怎么回事?
答案 0 :(得分:8)
执行时:
$foo | measure-object
PowerShell会自动展开集合/数组,并将每个元素沿着管道传递到下一个阶段。
执行时:
measure-object -inputobject $foo
cmdlet不会在内部展开集合。如果要在不让PowerShell自动展开的情况下检查集合,这通常会很有用。 BTW同样适用于Get-Member。如果你想看到“集合”上的成员而不是每个单独的元素,请执行以下操作:
get-member -inputobject $foo
在管道案例中模拟这种情况的一种方法是:
,$foo | Get-Member
这将包含一个元素的另一个集合中的foo(在本例中为collection)。当PowerShell自动展开它以便在管道中发送元素时,唯一的元素是$foo
,它将被发送到管道中。
答案 1 :(得分:0)
PowerShell可以帮到你。我们来看看Get-Help Measure-Object -full
并查看该参数。
-InputObject <psobject>
Specifies the objects to be measured. Enter a variable that contains
the objects, or type a command or expression that gets the objects.
Required? false
Position? named
Default value
Accept pipeline input? true (ByValue)
Accept wildcard characters? false
管道输入由值接受,这意味着它计算$foo
的每一行并计算它们。对于它的价值,所有example usages on Technet和Get-Help引用都使用此参数的管道输入。