是否有用于在 powershell 中解析 toml 文件的模块?
Does have a module for parsing toml files in powershell?
我试图在 powershell 中找到一个 toml 文件解析器,但我在 powershellgallery 中找不到任何关于它的信息。
确实,截至撰写本文时,似乎没有 PowerShell 模块用于 TOML 解析 在 PowerShell 库:
- Searching for "TOML" 在撰写本文时未产生任何相关匹配项。
但是,在 NuGet 库 中有一个 .NET 包可用:
虽然 您 可以 从 PowerShell 使用 NuGet 包,但不幸的是,从 PowerShell Core 7.2.2 开始,这样做并不简单。
This answer 讨论当前的陷阱和潜在的未来改进。
在这种特殊情况下,因为包没有依赖项,您可以通过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']
注:
对于字典类型,PowerShell 通常 允许互换使用索引语法(例如 ['my_table']
)和点符号,通过 .
,member-access 运算符(例如 .my_table
)。
但是, 不支持类型 [Tomlyn.Model.Table]
的字典,例如 [Tomlyn.Toml]::ToModel()
返回的,大概是因为该类型只实现了 generic IDictionary`2
接口,而不是它的 non-generic 对应接口 IDictionary
.
- 请参阅 GitHub issue #17190 进行讨论。
我试图在 powershell 中找到一个 toml 文件解析器,但我在 powershellgallery 中找不到任何关于它的信息。
确实,截至撰写本文时,似乎没有 PowerShell 模块用于 TOML 解析 在 PowerShell 库:
- Searching for "TOML" 在撰写本文时未产生任何相关匹配项。
但是,在 NuGet 库 中有一个 .NET 包可用:
虽然 您 可以 从 PowerShell 使用 NuGet 包,但不幸的是,从 PowerShell Core 7.2.2 开始,这样做并不简单。
This answer 讨论当前的陷阱和潜在的未来改进。
在这种特殊情况下,因为包没有依赖项,您可以通过
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']
注:
对于字典类型,PowerShell 通常 允许互换使用索引语法(例如
['my_table']
)和点符号,通过.
,member-access 运算符(例如.my_table
)。但是, 不支持类型
[Tomlyn.Model.Table]
的字典,例如[Tomlyn.Toml]::ToModel()
返回的,大概是因为该类型只实现了 genericIDictionary`2
接口,而不是它的 non-generic 对应接口IDictionary
.- 请参阅 GitHub issue #17190 进行讨论。