PowerShell 模块 list 文件格式 (.psd1) 本质上是一个带有特定键的 Hashtable 文字。这是 PowerShell 脚本的配置文件的理想选择。我最终想要做的是读取一个 .psd1 文件,其中包含一组特定于脚本的键。
例如(MyScriptConfig.psd1):
@{
FTPHost = "ftp.blah.com"
FTPUserName = "blah"
FTPPassword = "blah"
}
我没有理由不能对这些信息使用 XML、INI、JSON 或其他任何东西,但我宁愿它使用与 PowerShell 的模块 list 相同的基本数据格式。
显然,最简单的方法是阅读文本并将其传递给
Invoke-Expression
。这将返回一个哈希表,但随后它会调用文件中的任何内容,这容易出错并且可能不安全。我想我想起了一个使用 PowerShell cmdlet 的“安全”子集读取这些数据的 cmdlet,但我在想
ConvertFrom-StringData
和 DATA
部分,这两个部分都不允许我读取包含 Hashtable 文字的任意文件。PowerShell 中是否有内置的东西可以让我这样做?如果没有内置任何东西,那么我可能会走 JSON 或 Key=Value 的路线
ConvertFrom-StringData
.
最佳答案
Powershell 版本 5 添加了 Cmdlet Import-PowershellDataFile用于安全解析 PSD1 文件。
在版本 5 之前,至少有三种解决方案:
# Create a test PSD1 file
@'
@{
a1 = 'a1'
a2 = 2
a3 = @{
b1 = 'b1'
}
}
'@ | Set-Content -Path .path\example.psd1
# Read the file
Import-LocalizedData -BaseDirectory .\path -FileName example.psd1 -BindingVariable Data
# Use the data
$Data.a1
$Data.a3.b1
# Safely parse data
$Data2 = DATA {
@{
a1 = 'a1'
a2 = 2
a3 = @{
b1 = 'b1'
}
}
}
# Use the data
$Data2.a1
$Data2.a3.b1
关于powershell - 如何安全读取 PowerShell .PSD1 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408815/