PowerShell,无法读取数据文件



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

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

*.psd1文件包含 PowerShell哈希表文本,因此需要在代码中定义此类文本时相同的语法

因此,如果要创建一个包含字符串文字./python/buildzig.py(或./powershell/msterminal.ps1)的键path条目,则必须将其括起来- 任何一种形式都可以在这里:

  • path = '.powershellmsterminal.ps1'
  • path = ".powershellmsterminal.ps1"

但是,鉴于在*.psd1文件的上下文中,您实际上仅限于文本值,因此使用'...'(单引号)更有意义(请参阅about_Quoting_Rules)。


至于你尝试过的

哈希表条目(如path = ./python/buildzig.py)尝试创建具有键path和执行文件./python/buildzig.py结果的值的条目,因为 -在没有引用的情况下 - 令牌被解释为命令(请参阅about_Parsing以了解 PowerShell 如何解析命令和表达式)。

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


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

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

path = '.powershellmsterminal.ps1'

相关内容

  • 没有找到相关文章

最新更新