首先,这是我的代码:
$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
我对如何解释这一点感到茫然。我更喜欢第二次输出,但我不知道为什么它与第一次输出有所不同。有什么想法吗?
答案 0 :(得分:2)
当管道中有多种类型的对象时,第一个对象类型确定其余对象的格式。如果在命令提示符下单独运行命令,则不会看到此命令。每行开始一个新的管道。但是,当您在脚本中运行这些命令时,整个脚本将作为管道执行。要解决此问题,请使用Out-Default
例如:
$InputPath = "\\Really\long\path\etc"
Get-ChildItem $InputPath -Recurse -Force -ErrorVariable ErrorPath
$ErrorPath | select TargetObject | Out-Default
答案 1 :(得分:0)
前一个输出采用列表格式,后者采用表格格式。您可以通过将数据分别导入Format-List
或Format-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