如何在 powershell 中写入设置为 .psd1 文件的嵌套任意关联数组值?



我有一个以编程方式生成的powershell Array对象,数组内部有数组,有时称为"属性包"或"哈希表",但我认为它在本地称为"包含数组的数组"在最原生的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但似乎不存在这样的功能。

你试过使用New-ModuleManifest吗?在不知道任何其他细节的情况下,您似乎正在创建与模块中使用的清单文件基本相似的东西......但是,即使用例不同,您仍应能够使用该 cmdlet。

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

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/new-modulemanifest?view=powershell-5.1

起源于这个在PowerShell对象表示法(PSON)中保存哈希表的问题,我创建(并且仍在维护)一个演变为ConvertTo-Expression的PowerShell cmdlet。此脚本的最终目标是能够基于正确的PowerShell 语法而不是像 [JSON]( 或 [XML] 这样的外来格式在系统之间导出和导入PowerShell对象。
这包括区分字节数组和字节数组,但也包括正确接受(和格式化)单例。
输出是[ScriptBlock],可以很容易地保存为表达式。关键是(取决于使用情况)在最终调用(c.q.点源)它时可能会创建一个安全漏洞(请参阅:在受限安全环境中运行部分受信任的PowerShell代码。#12377)。
无论如何,我还包含一个-Explore参数,我相信该参数提供的输出与PSD1PowerShell数据文件所需的输出完全相同。实际上,我以前从未考虑过这种用法,但现在正在考虑为这个参数添加别名,并在下一个版本中为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'
}

相关内容

  • 没有找到相关文章

最新更新