我认为这与数据如何通过管道传递有关,但请看下面的两个例子;
$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
输出。幕后发生了什么?
当您将 InputObject 参数与 ForEach-Object 一起使用时,而不是 将命令结果管道传输到 ForEach-Object,InputObject 值为 被视为单个对象。