ZetCode

PowerShell Import-PowerShellDataFile

最后修改:2025 年 2 月 15 日

本文介绍PowerShell中的 Import-PowerShellDataFile cmdlet。它从 .psd1 文件导入值到哈希表中。该cmdlet安全地评估文件内容,而不执行脚本块。

PowerShell 数据文件基础

PowerShell 数据文件 (.psd1) 以键值对的形式存储配置数据。它们通常用于模块清单和配置设置。与脚本不同,它们不包含可执行代码。 Import-PowerShellDataFile cmdlet 可以安全地导入这些文件。

Import-PowerShellDataFile 的基本用法

最简单的用法是导入数据文件并将其内容作为哈希表返回。使用 -Path 参数指定文件路径。该cmdlet解析文件并将其转换为PowerShell对象。这对于读取配置文件非常有用。

data1.ps1
$config = Import-PowerShellDataFile -Path "C:\config\settings.psd1"
$config

这会导入一个配置文件并将其存储在 $config 变量中。该变量包含一个哈希表,其中包含文件的键值对。然后,您可以通过键访问 individual 值。

导入模块清单数据

模块清单 (.psd1 文件) 包含有关PowerShell模块的元数据。您可以使用 Import-PowerShellDataFile 读取此数据。此示例展示了如何从清单中访问模块版本信息。

data2.ps1
$manifest = Import-PowerShellDataFile -Path ".\MyModule\MyModule.psd1"
$manifest.ModuleVersion

此命令读取模块清单文件并显示其版本号。版本存储在返回哈希表的 ModuleVersion 属性中。

PS C:\> .\data2.ps1
1.2.0

访问嵌套哈希表值

PowerShell 数据文件可以包含嵌套的哈希表。您可以使用点表示法访问这些值。此示例演示了如何从数据文件中访问嵌套配置设置。

data3.ps1
$config = Import-PowerShellDataFile -Path ".\appsettings.psd1"
$config.Database.Server

这会读取带有嵌套数据库设置的配置文件。然后,它从 Database 部分访问服务器名称。点表示法导航嵌套结构。

与 splatting 一起使用

导入的哈希表可以与PowerShell splatting 一起使用。Splatting 使用哈希表将参数传递给 cmdlet。此示例展示了如何使用配置文件进行 splatting 参数。

data4.ps1
$params = Import-PowerShellDataFile -Path ".\mailparams.psd1"
Send-MailMessage @params

这会从文件导入邮件参数,并将它们 splat 到 Send-MailMessage。变量名之前的 @ 符号表示 splatting。每个键值对都成为 cmdlet 的参数值对。

导入多个配置文件

您可以将多个配置文件合并到一个配置中。此示例合并了特定于不同环境的文件中的设置。结果哈希表包含所有配置值。

data5.ps1
$baseConfig = Import-PowerShellDataFile -Path ".\config\base.psd1"
$envConfig = Import-PowerShellDataFile -Path ".\config\prod.psd1"
$finalConfig = $baseConfig + $envConfig

这会将基本配置与特定于环境的覆盖合并。+ 运算符合并两个哈希表。第二个哈希表中的值将覆盖第一个哈希表中匹配的键。

验证导入的数据

导入数据后,您可以验证其结构和值。此示例检查必需的配置键。如果缺少任何键,它将引发错误。

data6.ps1
$config = Import-PowerShellDataFile -Path ".\appconfig.psd1"
$required = @("Server", "Database", "Credentials")
foreach ($key in $required) {
    if (-not $config.ContainsKey($key)) {
        throw "Missing required configuration key: $key"
    }
}

此脚本确保所有必需的配置键都存在。它在 $required 数组中检查每个键与导入的配置。如果缺少任何键,它将引发异常。

将 JSON 转换为 PowerShell 数据文件

您可以将 JSON 数据转换为 PowerShell 数据文件格式。此示例展示了如何读取 JSON 并将其另存为 .psd1 文件。然后可以使用 Import-PowerShellDataFile 导入转换后的文件。

data7.ps1
$json = Get-Content -Path ".\config.json" -Raw | ConvertFrom-Json
$json | ConvertTo-Json -Depth 10 | Out-File ".\config.psd1"

这会读取 JSON 文件,将其转换为 PowerShell 对象,然后另存为 .psd1 文件。-Depth 参数可确保保留嵌套结构。生成的文件可以正常导入。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的 Import-PowerShellDataFile cmdlet。我们演示了从 .psd1 文件导入配置数据的各种用例。

作者

我叫Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。至今,我已撰写了1400多篇文章和8本电子书。我在教授编程方面拥有十年以上的经验。

列出 所有 PowerShell 教程