我正在使用PowerShell脚本,该脚本需要从文件中获取数据并将其用作写入其中的函数的参数。基本上我正在寻找的是JSON或XML文件,但我不确定要使用什么。
我正在寻找的是相对容易使用的,传递数据类型或对象而不是字符串。
数据的一部分在XML中看起来像这样:
<RegistryEntriesList>
<registryPath>HKLM:\\Software\\Lenovo\\Configuration\\</registryPath> <registryProperty>PATH </registryProperty>
<registryPath>HKLM:\\Software\\Lenovo\\Configuration\\</registryPath> <registryProperty>LOGS </registryProperty>
<registryPath>HKLM:\\Software\\Lenovo\\Connections\\</registryPath> <registryProperty>MinConnectionsPerTarget</registryProperty>
<registryPath>HKLM:\\Software\\Lenovo\\Connections\\</registryPath> <registryProperty>MaxWorkingIscsiConnections</registryProperty>
<registryPath>HKLM:\\Software\\Lenovo\\Connections\\</registryPath> <registryProperty>WaitIntervalInMilliseconds</registryProperty>
另一部分在JSON中会喜欢这个:
"entredInput":[{"title":"Powershell","desc":"first"},
{"title":"json","desc":"third"},
{"title":"Configfile","desc":"second"}]
还有更多像这样的人。
基本上我会将这些用于自动化目的。我知道PowerShell4.0本身就有cmdlet ConvertFrom-JSON,但它在PS2.0上工作,我希望我的脚本可以在任何版本的PowerShell上运行,即任何版本的Windows。所以我猜XML可能是更好的选择,但我不确定。还有其他选择??
我已经浏览了很多关于JSON与XML的网页链接,他们只是让我很困惑。请让我在JSON,XML和SOMETHINGELSE中选择一个更好的选项。谢谢你回答这个问题。
答案 0 :(得分:0)
对于PowerShell 2.0,您可能希望使用XML。对于支持JSON的任何东西,我都会使用它:它通常更轻量级。
替代方法是将psd1文件与Import-LocalizedData
cmdlet一起使用。假设您在当前文件夹中创建文件'Data.psd1',如下所示:
@{
RegistryEntriesList = @(
@{
registryPath = 'HKLM:\Software\Lenovo\Configuration\'
registryProperty = 'PATH'
},
@{
registryPath = 'HKLM:\Software\Lenovo\Configuration\'
registryProperty = 'LOGS'
}
)
}
正如您所看到的那样,它是具有单个键RegistryEntriesList的哈希表。它的值是可用于splatting的哈希表的集合。 您可以导入此数据并传递给您的命令,如下所示:
# Our test command...
function New-RegistryEntry {
param (
[string]$RegistryProperty,
[string]$RegistryPath
)
"Got RegistryPath: $RegistryPath and RegistryProperty: $RegistryProperty"
}
Import-LocalizedData -BindingVariable Params -BaseDirectory . -FileName Data.psd1
foreach ($item in $Params.RegistryEntriesList) {
New-RegistryEntry @item
}