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
.为什么我会得到不同的行为,我怎样才能实现我想要的目标?
谢谢.
我还没有弄清楚确切的原因(每个人都还在学习一些东西),但你的问题$_
在某种程度上与管道元素有关。如果我强制强制转换,我可以让你的代码工作$_
$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)
有点好奇
我在测试时不喜欢Name
and 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)
归档时间: |
|
查看次数: |
2869 次 |
最近记录: |