为什么在加载程序集后PowerShell输出会发生变化?

时间:2014-07-28 15:10:29

标签: powershell scripting

如果我首先使用反射加载了一个程序集,我会从脚本中的New-Item 获得一些不寻常的输出。为什么呢?

如果我跑

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
New-Item -Path "temp" -ItemType directory

我从New-Item获得以下奇数输出:

PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Users\swoogan\Desktop\temp
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Users\swoogan\Desktop
PSChildName       : temp
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : temp
Parent            : Desktop
Exists            : True
Root              : C:\
FullName          : C:\Users\swoogan\Desktop\temp
Extension         :
CreationTime      : 7/28/2014 11:03:10 AM
CreationTimeUtc   : 7/28/2014 3:03:10 PM
LastAccessTime    : 7/28/2014 11:03:10 AM
LastAccessTimeUtc : 7/28/2014 3:03:10 PM
LastWriteTime     : 7/28/2014 11:03:10 AM
LastWriteTimeUtc  : 7/28/2014 3:03:10 PM
Attributes        : Directory
BaseName          : temp
Mode              : d----

我期待的输出是:

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         7/28/2014  11:03 AM            temp

如果我将LoadWithPartialName的输出传递给Out-Null,那么我确实得到了预期的输出。我想了解这里发生的事情,以便将来可以预见到这些差异。

1 个答案:

答案 0 :(得分:2)

我想我想出来了。

LoadWithPartialName的原始情况下,脚本的输出是PSObject的数组,因为Powershell将任何未处理的对象发送到管道,并且项目是混合类型(0 = AssemblyInfo)来自Load; 1 =来自new-item的DirectoryInfo)。

如果将LoadWithPartialName重定向到[void]甚至将输出保存在变量中,则脚本的输出是单个DirectoryInfo对象。

PSObject的格式与DirectoryInfo

不同