PowerShell,无法读取数据文件

PowerShell, Cannot read data file

我有一个 PowerShell 脚本可以读取 register.psd1 文件,其内容如下。

@{
    # Building Zig compiler
    zig = @{
        name = "zig"
        path = ./python/buildzig.py
        language = "Python"
        os = "all" 
    }

    # Building Windows Terminal for Windows 10.
    windowsterminal = @{
        name = "WindowsTerminal"
        path = ./powershell/msterminal.ps1
        language = "Python"
        os = "windows"  
    }
}

我使用以下命令读取文件。

Import-PowerShellDataFile -Path register.psd1

在 运行 脚本之后,我收到以下错误消息。

Import-PowerShellDataFile : Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions.

我做错了什么,可能的解决方案是什么?

我刚刚为路径参数添加了' ',之后错误消失了。希望这是你想要的输出。

path = '.\powershell\msterminal.ps1'

*.psd1 文件包含 PowerShell hashtable 文字 因此需要 相同的语法就像在代码 :

中定义这样的文字

因此,如果您想创建一个包含 字符串文字 ./python/buildzig.py(或 ./powershell/msterminal.ps1)的键 path 的条目,你必须引用它——这里的任何一种形式都可以:

  • path = '.\powershell\msterminal.ps1'
  • path = ".\powershell\msterminal.ps1"

但是,考虑到在 *.psd1 文件的上下文中,您实际上仅限于 文字 值,请使用 '...'(单引号)更有意义(参见 about_Quoting_Rules)。


至于你试过的

诸如 path = ./python/buildzig.py 之类的哈希表条目尝试创建一个条目,其键为 path 并且值是 执行 文件 [=12] 的结果=],因为 - 在没有 quoting 的情况下 - 标记被解释为 command(参见about_Parsing 了解 PowerShell 如何解析命令和表达式)。

您看到的 - 不幸的是模糊的 - 错误消息 (Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions.),源于这样一个事实 出于安全原因,*.psd1 文件中不允许执行命令,它们(主要是[1])仅限于定义文字值。


[1] 您可以使用以下 "variables",它们实际上是 常量$true$false, $null.此外,根据 *.psd1 文件的用途,允许 select 一些额外的自动变量:$PSCulture$PSUICulture,但要由 [=29] 读取的文件除外=],以及 模块清单 中的 $PSScriptRoot$PSEdition$EnabledExperimentalFeatures - 参见 about_Language_Modes.