【问题标题】:PowerShell, Cannot read data filePowerShell,无法读取数据文件
【发布时间】:2019-10-23 21:16:48
【问题描述】:

我有一个 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.

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

【问题讨论】:

  • 用双引号将路径括起来。 "./python/buildzig.py"

标签: powershell powershell-v6.0


【解决方案1】:

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

path = '.\powershell\msterminal.ps1'

【讨论】:

    【解决方案2】:

    *.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 和作为执行 文件./python/buildzig.py 的结果的值创建一个条目,因为 - 在不存在的情况下quoting - 标记被解释为 command(请参阅about_Parsing 了解 PowerShell 如何解析命令和表达式)。

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


    [1] 您可以使用以下“变量”,它们实际上是常量$true$false$null。此外,根据*.psd1 文件的用途,允许选择一些额外的自动变量:$PSCulture$PSUICultureImport-PowerShellDataFile 和另外$PSScriptRoot、@ 读取的文件除外模块清单中的 987654346@ 和 $EnabledExperimentalFeatures - 请参阅 about_Language_Modes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2019-09-26
      • 1970-01-01
      • 2012-09-13
      • 2016-08-02
      • 1970-01-01
      相关资源
      最近更新 更多