我有一个以编程方式生成的powershell数组对象,数组内部的数组,数组内部,有时称为"属性包"或者#"散列表",但我认为它本身被称为"包含数组的数组"在最本土的powershell术语中。
例如:
@{
Version = '1.0.0'
Name = 'thing'
Revision = 'c3a89cd20e19bb82f41e95e0806edc5b6cfd224e'
Date = '2016-12-09'
Build = '1234'
Contents = @{
"index.html" = "23dd7b993f40bb3ae8848fe104b3b767"
}
}
生成一个只将一个特定内容集保存到.PSD1文件的函数似乎不够通用。
我想将精确的内存中数组结构保存到PSD1文件中。 Powershell中是否存在任何内置方式来保持具有上述值的内存变量? "相反的功能" Import-PowershellDataFile
。我猜它会被称为Export-PowershellDatafile
,但似乎不存在这样的功能。
答案 0 :(得分:1)
您是否尝试过使用New-ModuleManifest
?在不知道任何其他细节的情况下,您似乎正在创建与模块中使用的清单文件基本类似的东西。但是,即使您的用例不同,您仍然应该能够使用该cmdlet。
New-ModuleManifest
已经存在了一段时间(至少从v3开始,但我似乎还记得在v2中使用过它)。它允许您定义属性的哈希表,并将其另存为.psd1
。
答案 1 :(得分:1)
从这个Save hash table in PowerShell object notation (PSON)问题开始,我创建了(并且仍在维护)PowerShell cmdlet,该cmdlet演变为ConvertTo-Expression
。此脚本的最终目标是能够基于正确 PowerShell语法而不是像[JSON
这样的奇异格式在系统之间导出和导入 PowerShell 对象。 ](或[XML
]。
这包括区分 字节数组 和 字节数组 ,但也可以正确接受(并格式化)单例。
输出为[ScriptBlock]
,可以轻松将其另存为表达式。关键是(取决于用法)最终调用(参见dot sourcing)(请参阅:Running partly trusted PowerShell code in a restricted security environment.
#12377
)时,它可能会创建一个安全漏洞。
无论如何,我还包含了一个-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'
}
在以下情况下会自动转换为以下表达式:将其导出到文件或仅显示它:
findViewById<Button>(R.id.done_button).setOnClickListener { changeNickname() }