【发布时间】:2019-08-08 14:31:03
【问题描述】:
我有一个处理 json 字符串的 PowerShell 脚本。我的目标是将此结果集传递给 Pentaho,以便我可以对其进行处理并将其放入数据库表中。
我的 PowerShell 脚本在 Pentaho 之外按预期工作。我可以毫无问题地解析文件并获取我需要的信息。当我尝试传递这些值时,Pentaho 返回愚蠢的结果。
这是我的脚本
$scriptMode = 'GetFileInfo'
$json = '{
"building": [
{
"buildingname": "NAPA Auto Parts",
"files": [{
"sheets": [{
"name": "BATTERY",
"results": [{
"filename": "BATTERY - 1679568711.xlsx",
"sku": "1679568711"
}
]
}
],
"name": "2.15.19.xlsx",
"status": "processed",
"fileId": "c586bba6-4382-42c4-9c29-bffc6f7fe0b6"
}, {
"name": "Oct-Nov 2018 11.30.18.xlsx",
"errors": ["Unknown sheet name: TOILET PLUNGER"],
"status": "failed",
"fileId": "afa7c43f-26dc-421c-b2eb-45ad1e899c42"
}
]
},
{
"buildingname": "O''Reily Auto Parts",
"files": [{
"sheets": [{
"name": "ALTERNATOR",
"results": [{
"filename": "ALTERNATOR - 6.3.19 1629453444.xlsx",
"sku": "1629453444"
}
]
}, {
"name": "OIL FILTER",
"results": [{
"filename": "OIL FILTER - 6.3.19 1629453444.xlsx",
"sku": "1629453444"
}
]
}
],
"name": "6.3.19.xlsx",
"status": "processed",
"fileId": "647089fe-9592-4e2b-984f-831c4acd4d9c"
}
]
}
]
}'
$psdata = ConvertFrom-Json -InputObject $json
IF ($scriptMode -eq "GetFileInfo") {
$psdata.building | foreach-Object {
foreach ($File in $_.files)
{
[PSCustomObject]@{
BuildingName = $_.buildingname
FileName = $File.name
fileId = $File.fileId
Status = $File.status}
}
}
}
ElseIF ($scriptMode -eq "GetErrorInfo") {
$psdata.building | foreach-Object {
foreach ($File in $_.files)
{
[PSCustomObject]@{
BuildingName = $_.buildingname
Errors = $File.errors
SheetName = $File.sheets.name
fileId = $File.fileId} | Where-Object {$_.errors -ne $null}
}
}
}
这就是我的转换设置。我有一个表输入查询,它将根据我希望脚本执行的操作(获取文件信息或获取错误信息)设置 PowerShell 的运行命令。
然后我让“执行进程”步骤运行 PowerShell 命令
这是 Pentaho 返回的内容与 PowerShell 返回的内容
我希望返回的结果与 PowerShell 返回的结果完全相同。我希望我可以在不将数据导出为另一种格式的情况下完成此操作。我们在 Pentaho 中的 Json Input 步骤中遇到了问题,因此我们选择了 PowerShell 而不是 Pentaho 中的“Modified Javascript Value”步骤。
知道我怎样才能让它返回一个结果集(就像一个 SQL 查询会返回)给 Pentaho 吗?
【问题讨论】:
-
在将数据返回到 Pentaho 之前,将数据通过
Out-String管道化 -Out-String将返回一个尽可能匹配您在屏幕上看到的格式化输出的字符串 -
Mathias,我应该在哪里将它添加到我的代码中?我在 foreach 部分之后添加了它,它以与我的版本相同的方式返回数据
标签: powershell pentaho pentaho-spoon pentaho-data-integration