Wal*_*mly 2 windows powershell scripting
我在目录中有六个.txt文件.所以,我创建了一个变量:
$foo = gci -Name *.txt
Run Code Online (Sandbox Code Playgroud)
$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
Run Code Online (Sandbox Code Playgroud)
我想测量那个对象,所以我把它传递给Measure-Object:
PS > $foo | Measure-Object
Count : 6
Average :
Sum :
Maximum :
Minimum :
Property :
Run Code Online (Sandbox Code Playgroud)
这就是我所期待的.但是,我也可能这样通过$foo:
PS> Measure-Object -InputObject $foo
Count : 1
Average :
Sum :
Maximum :
Minimum :
Property :
Run Code Online (Sandbox Code Playgroud)
这不是我所期待的.这里发生了什么?
执行时:
$foo | measure-object
Run Code Online (Sandbox Code Playgroud)
PowerShell会自动展开集合/数组,并将每个元素沿管道传递到下一个阶段.
执行时:
measure-object -inputobject $foo
Run Code Online (Sandbox Code Playgroud)
cmdlet不在内部展开集合.如果要在不让PowerShell自动展开的情况下检查集合,这通常会很有用.BTW同样适用于Get-Member.如果要查看"集合"上的成员而不是每个单独的元素,请执行以下操作:
get-member -inputobject $foo
Run Code Online (Sandbox Code Playgroud)
在管道案例中模拟这种情况的一种方法是:
,$foo | Get-Member
Run Code Online (Sandbox Code Playgroud)
这将使用一个元素包装另一个集合中的foo(在本例中为collection).当PowerShell自动展开它以沿管道发送元素时,唯一的元素是$foo从管道发送的.