当 New-Item 输出发送到 null 时,Get-ChildItem 的响应不同

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

为什么这两个代码片段的行为不同?这是一个错误吗? (PS 版本 = 5.1.22621.2506,PS 版本 = 桌面版)

## Code Snippet #1
rmdir -recurse org
mkdir org\dir1
Get-ChildItem org -Directory  | foreach {   $_.GetType() }

## Code Snippet #2
rmdir -recurse org
mkdir org\dir1 | Out-Null
Get-ChildItem org -Directory  | foreach {   $_.GetType() }

两者之间的唯一区别是,在代码片段 2 中,

mkdir
的输出通过管道传输到 Out-Null。第二个片段(及其变体,如
$null = mkdir org/dir1
)按我的预期工作:

Get-ChildItem org -Directory  | foreach {   $_.GetType() }

IsPublic IsSerial Name                                     BaseType                                                                  
-------- -------- ----                                     --------                                                                  
True     True     DirectoryInfo                            System.IO.FileSystemInfo 

但是当未捕获 mkdir 输出时(如代码片段 1 中所示),Get-ChildItem 会执行一些意想不到的操作:

Get-ChildItem org -Directory  | foreach {   $_.GetType() }


    Directory: C:\Users\Phil\ps\as1\org


Mode                 LastWriteTime         Length Name                                                             
----                 -------------         ------ ----
d-----         4/10/2024  12:56 AM                dir1                                  

Module                     : CommonLanguageRuntimeLibrary
Assembly                   : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TypeHandle                 : System.RuntimeTypeHandle
DeclaringMethod            : 
BaseType                   : System.IO.FileSystemInfo
UnderlyingSystemType       : System.IO.DirectoryInfo
FullName                   : System.IO.DirectoryInfo
AssemblyQualifiedName      : System.IO.DirectoryInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
[: : :]

如果使用

New-Item
而不是
mkdir
,会看到相同的结果。我不明白为什么(甚至如何)目录结构可能会有所不同,具体取决于在创建过程中是否捕获输出。

powershell get-childitem powershell-5.1 new-item
1个回答
0
投票

这种行为 - 只是一个 显示 问题 - 可能会令人惊讶,但这是设计使然:

如果管道中的第一个输出对象触发基于显式定义的格式定义的基于的显示格式,则不同类型的后续输出对象将被强制为列表格式。

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