管道 ForEach-Object 和 -InputObject 之间的区别[重复]

问题描述 投票:0回答:1

我认为这与数据如何通过管道传递有关,但请看下面的两个例子;

$someData = Get-ChildItem

$obj = ForEach-Object -InputObject $someData -Process {[pscustomobject] @{Name=$_.Name; LastWriteTime = $_.LastWriteTime}}

$obj2 = Get-ChildItem | % {[pscustomobject] @{Name=$_.Name; LastWriteTime = $_.LastWriteTime}}

对象类型不同,虽然我期望两者都是

[PSCustomObject]
类型,但只有一个是;

$obj.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                    
-------- -------- ----                                     --------                                                                                    
True     False    PSCustomObject                           System.Object                                                                               

$obj2.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                    
-------- -------- ----                                     --------                                                                                    
True     True     Object[]                                 System.Array    

$Obj2
传递到
Format-Table
时,我得到了我想要的输出类型,即实际的值表。但是
$Obj
提供了一些无用的
Format-Table
输出。幕后发生了什么?

powershell parameter-passing foreach-object
1个回答
0
投票

ForEach-对象文档

当您将 InputObject 参数与 ForEach-Object 一起使用时,而不是 将命令结果管道传输到 ForEach-Object,InputObject 值为 被视为单个对象。

© www.soinside.com 2019 - 2024. All rights reserved.