Arrays 如何将嵌套的任意关联数组值集写入powershell中的.psd1文件?

Arrays 如何将嵌套的任意关联数组值集写入powershell中的.psd1文件?,arrays,powershell,hashtable,propertybag,Arrays,Powershell,Hashtable,Propertybag,我有一个通过编程生成的powershell数组对象,它包含数组中的数组,数组中的数组,有时称为“属性包”或“哈希表”,但我认为它在大多数本机powershell术语中本机称为“包含数组的数组” 例如: @{ Version = '1.0.0' Name = 'thing' Revision = 'c3a89cd20e19bb82f41e95e0806edc5b6cfd224e' Date = '2016-12-09' Build = '1234' Conte

我有一个通过编程生成的powershell数组对象,它包含数组中的数组,数组中的数组,有时称为“属性包”或“哈希表”,但我认为它在大多数本机powershell术语中本机称为“包含数组的数组”

例如:

 @{
 Version  = '1.0.0'
 Name     = 'thing'
 Revision = 'c3a89cd20e19bb82f41e95e0806edc5b6cfd224e'
 Date     = '2016-12-09'
 Build    = '1234'
 Contents = @{
      "index.html" = "23dd7b993f40bb3ae8848fe104b3b767"
 }
 }
生成只将一组特定内容保存到.PSD1文件的函数似乎不够通用。
我想把内存中的数组结构保存到一个PSD1文件中。Powershell中是否存在任何内置方式来持久化具有上述值的内存中变量?
导入PowershellDataFile
的“相反功能”。我猜想它会被称为导出PowershellDatafile,但似乎不存在这样的函数。

您是否尝试过使用
新的ModuleManifest
?在不知道任何其他细节的情况下,您似乎正在创建与模块中使用的清单文件基本相似的内容。。。但是,即使您的用例不同,您仍然应该能够使用cmdlet

新的ModuleManifest
已经存在了一段时间(至少从v3开始,但我似乎还记得在v2中使用它)。它允许您定义属性的哈希表,并将其保存为
.psd1

源于这个问题,我创建(并仍在维护)了一个PowerShell cmdlet,该cmdlet发展为一个。此脚本的最终目标是能够基于正确的PowerShell语法而不是像[
JSON
](或[
XML
])这样的外来格式在系统之间导出和导入PowerShell对象。
这包括区分字节数组和字节数组,但也要正确接受(和格式化)单例。
输出是
[ScriptBlock]
,可以轻松地保存为表达式。关键是(根据使用情况)它可能会在最终调用(c.q.)它时创建一个安全漏洞(请参见:)。
无论如何,我还包括了一个
-Explore
参数,我认为该参数提供的输出与
PSD1
PowerShell数据文件所需的输出完全相同。实际上,我以前从未考虑过这种用法,但现在正考虑将此参数别名,并在下一个版本中为
PSD1
文件赋予它唯一的含义。
换言之:

$Data = @{
 Version  = '1.0.0'
 Name     = 'thing'
 Revision = 'c3a89cd20e19bb82f41e95e0806edc5b6cfd224e'
 Date     = '2016-12-09'
 Build    = '1234'
 Contents = @{
      "index.html" = "23dd7b993f40bb3ae8848fe104b3b767"
 }
 }

ConvertTo-Expression -Explore $Data # | Out-File .\MyData.psd1
返回一个
[ScriptBlock]
,该表达式在导出到文件或仅显示时自动转换为以下表达式:

@{
        'Date' = '2016-12-09'
        'Revision' = 'c3a89cd20e19bb82f41e95e0806edc5b6cfd224e'
        'Version' = '1.0.0'
        'Build' = '1234'
        'Contents' = @{'index.html' = '23dd7b993f40bb3ae8848fe104b3b767'}
        'Name' = 'thing'
}

我只是想知道在不进行文本操作的情况下如何修改psd1…及时的问题!编写了几个函数,可以实现您想要的功能:
Export PSData
Write powershell hashtable
Export Clixml有什么问题吗?因为我想将其作为.psd1加载。我想我可以直接使用trip,但为什么不在PSD1中也有往返呢?这是一个很好的问题,我建议在您的答案中添加一个链接。请注意,这些不是您正在处理的数组-仅是[嵌套]哈希表(
[hashtable]
[System.Collections.hashtable]
)的实例)。