我在脚本中使用Collections.Generic.List[object]
而不是PowerShell数组,以便拥有" .add()"而且由于速度(列表非常大)。
当我通过Export-Clixml
导出列表并再次重新导入时,它不再是通用列表;它是一个标准数组," .add()"不再有用了。
奇怪(或不是),当我将另一个通用列表对象放在第一个通用列表对象中时,它在导出导入过程中幸存下来。 为什么以及如何解决这个问题?
$list = New-Object System.Collections.Generic.List[object]
$entry = New-Object Psobject -Property @{
Test = "1"
Sublist = (New-Object System.Collections.Generic.List[object])
}
$list.add($entry)
$list | Export-Clixml D:\text.xml
$newlist = import-clixml D:\text.xml
# Produces this export:
*<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCustomObject</T>
<T>System.Object</T>
</TN>
<MS>
<S N="Test">1</S>
<Obj N="Sublist" RefId="1">
<TN RefId="1">
<T>System.Collections.Generic.List`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</T>
<T>System.Object</T>
</TN>
<LST />
</Obj>
</MS>
</Obj>
</Objs*>
答案 0 :(得分:3)
管道正在为你做这件事。管道将“展开”数组和集合,但多个返回总是重新组装成数组。 arraylist中的arraylist可以工作,因为它只展开一层深,所以第一个(外部)arraylist被“展开”而第二个(内部)arraylist完整地通过了。
以这种方式尝试:
Export-Clixml -InputObject $list -Path d:\text.xml