【问题标题】:Have PowerShell pass results to Pentaho让 PowerShell 将结果传递给 Pentaho
【发布时间】: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


【解决方案1】:

您的结果集很可能会返回整个内容,只是没有像您预期的那样“表格化”,它可能会返回整个表格,全部以一种长文本格式汇总,但仍然包含所有换行符/分列符。

尝试在您的 pentaho 流程中使用拆分步骤来处理返回的字符串。首先,尝试使用分隔符为“${line.separator}”的“将字段拆分为行”。 从那里你要做的就是把整个东西分开,直到它变成 pentaho 中的一张桌子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多