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