如何从Powershell v3中的哈希数组生成PSCustomObjects数组?

Dav*_*vid 5 powershell powershell-3.0

假设我在Powershell v3中有一系列哈希:

> $hashes = 1..5 | foreach { @{Name="Item $_"; Value=$_}}
Run Code Online (Sandbox Code Playgroud)

我可以将单个哈希转换为PSCustomObject如下:

> $co = [PSCustomObject] $hashes[0]
> $co | ft -AutoSize

Value Name  
----- ----  
    1 Item 1

> $co.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object 
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.当我尝试将整个哈希数组转换PSCustomObjects为管道时,会出现问题:

> ($hashes | foreach { [PSCustomObject] $_})[0].getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     -------- 
True     True     Hashtable                                System.Object
Run Code Online (Sandbox Code Playgroud)

如你所见,我得到的是一系列Hashtable对象,而不是PSCustomObjects.为什么我会得到不同的行为,我怎样才能实现我想要的目标?

谢谢.

Mat*_*att 2

我还没有弄清楚确切的原因(每个人都还在学习一些东西),但你的问题$_在某种程度上与管道元素有关。如果我强制强制转换,我可以让你的代码工作$_

$hashes = 1..5 | foreach { @{Name="Item $_"; Value=$_}}
$hashes | %{([pscustomobject][hashtable]$_)}
Run Code Online (Sandbox Code Playgroud)

输出

Value Name  
----- ----  
    1 Item 1
    2 Item 2
    3 Item 3
    4 Item 4
    5 Item 5
Run Code Online (Sandbox Code Playgroud)

有点好奇

我在测试时不喜欢Nameand Value(这就是字面哈希表的标题,我在测试时发现它很混乱),所以我将后者更改为Data,然后输出有所不同。我只是因为好奇才发布它。很难在帖子中显示结果。

Name                                                                                                                                                     Data
----                                                                                                                                                     ----
Item 1                                                                                                                                                      1
Item 2                                                                                                                                                      2
Item 3                                                                                                                                                      3
Item 4                                                                                                                                                      4
Item 5                                                                                                                                                      5
Run Code Online (Sandbox Code Playgroud)