ErrorVariable输出不如预期

时间:2014-02-24 22:11:29

标签: powershell

首先,这是我的代码:

$InputPath = "\\Really\long\path\etc"
Get-ChildItem -Path $InputPath -Recurse -Force -ErrorVariable ErrorPath
$ErrorPath | select TargetObject

我面临的问题是ErrorVariable参数。 Get-ChildItem处理太长的路径存储在那里(通常大约250个以上的字符)。当我管道$ ErrorPath来选择时,输出如下所示:

TargetObject : \\Really\long\path\etc\1

TargetObject : \\Really\long\path\etc\2

TargetObject : \\Really\long\path\etc\3

但是,如果我再次运行最后一行(通过运行选择或手动输入),输出将更改为:

TargetObject
------------
\\Really\long\path\etc\1
\\Really\long\path\etc\2
\\Really\long\path\etc\3

我对如何解释这一点感到茫然。我更喜欢第二次输出,但我不知道为什么它与第一次输出有所不同。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

当管道中有多种类型的对象时,第一个对象类型确定其余对象的格式。如果在命令提示符下单独运行命令,则不会看到此命令。每行开始一个新的管道。但是,当您在脚本中运行这些命令时,整个脚本将作为管道执行。要解决此问题,请使用Out-Default例如:

$InputPath = "\\Really\long\path\etc"
Get-ChildItem $InputPath -Recurse -Force -ErrorVariable ErrorPath
$ErrorPath | select TargetObject | Out-Default

答案 1 :(得分:0)

前一个输出采用列表格式,后者采用表格格式。您可以通过将数据分别导入Format-ListFormat-Table cmdlet来强制执行其中一个:

PS C:\> $ErrorPath | select TargetObject | Format-List


TargetObject : \\Really\long\path\etc\1

TargetObject : \\Really\long\path\etc\2

TargetObject : \\Really\long\path\etc\3


PS C:\> $ErrorPath | select TargetObject | Format-Table

TargetObject
------------
\\Really\long\path\etc\1
\\Really\long\path\etc\2
\\Really\long\path\etc\3