我有一个目录中有六个.txt文件。 所以,我创build了一个variables:
$foo = gci -Name *.txt
$foo
现在是一个由六个string组成的数组。 在我的情况下,我有
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
,它被发送到管道中。
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
每一行,并记住它们。 对于这个值, Technet和Get-Help引用中的所有示例用法都使用此参数的管道输入。