PowerShell中有解析TOML文件的模块吗?

los*_*sof 5 powershell toml

我正在尝试寻找适用于 PowerShell 的TOML文件解析器。

我在PowerShell 库或预安装的 PowerShell 函数中找不到任何有关它的信息。

mkl*_*nt0 8

事实上,截至撰写本文时, PowerShell Gallery似乎还没有发布用于TOML解析的PowerShell模块

但是,NuGet Gallery中提供了一个.NET


虽然可以从 PowerShell 使用 NuGet 包,但不幸的是,从 PowerShell Core 7.2.2 开始,这样做并不简单。

  • 这个答案讨论了当前的陷阱和未来潜在的增强功能。

  • 这种特殊情况下,由于该包没有依赖项,因此您可以通过以下方式下载该包Install-Package,如下所示:

使用示例

# Determine the package's local installation location.
# If it isn't installed, install it first, in the current user's scope.
while (-not ($installDir = (Get-Package -ErrorAction Ignore -ProviderName NuGet Tomlyn).Source)) {
  $null = Install-Package -Scope CurrentUser -ErrorAction Stop -ProviderName NuGet Tomlyn
}

# Load the package's assembly into the session.
Add-Type -ErrorAction Stop -LiteralPath (Join-Path $installDir '../lib/netstandard2.0/Tomlyn.dll')

# Define a sample TOML string to parse.
$tomlStr = @'
global = "this is a string"
# This is a comment of a table
[my_table]
key = 1 # Comment a key
value = true
list = [4, 5, 6]
'@

# Parse the TOML string into an object mod)el (nested dictionaries).
$tomlTable = [Tomlyn.Toml]::ToModel($tomlStr)

# Output the '[my_table]' section's 'list' value.
#  -> 4, 5, 6
# IMPORTANT: Use ['<key>'] syntax; .<key> syntax does NOT work.
$tomlTable['my_table']['list']
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 对于字典类型,PowerShell通常允许互换使用索引语法(例如['my_table'])和点符号 、 via .、成员访问运算符(例如.my_table)。

  • 但是,类型 的字典[Tomlyn.Model.Table]支持点表示法,例如由 所返回的字典[Tomlyn.Toml]::ToModel(),大概是因为该类型仅实现泛型 IDictionary`2接口,而不是其非泛型对应项IDictionary