如何将json对象作为参数传递给另一个PowerShell脚本

时间:2015-12-08 20:24:21

标签: json powershell

我对powershell的东西很新。所以需要一些帮助。

我想将一个json对象作为参数传递给另一个ps1。从我在搜索后阅读的内容来看,我需要将它从json字符串转换为powershell对象。如果我错了,请纠正我。这就是我正在做的事情

调用脚本:

$jsonParams = "{
     `"TaskName`": `"$taskName`",
      `"ExitCode`": `"$exitCode`",
      `"ErrorMessage`": `"$errorMessage`"
   }

$jsonObject = $jsonParams | ConvertFrom-Json
$argumentList = @($param1, $param2, $jsonObject) 

Invoke-Expression "& `"$scriptPath`" $argumentList"

并在被调用的脚本中 -

param (
    [string]$param1,
    [string]$param2,
    [Microsoft.PowerShell.Commands.JsonObject]$jsonObject
)

但是,调用脚本会抛出错误

ConvertFrom-Json : Invalid object passed in, ':' or '}' expected. (21): {

此代码有什么问题。此外,在将json对象传递给被调用脚本之后,我应该如何在其中访问它的值。

谢谢!

1 个答案:

答案 0 :(得分:4)

您的JSON格式不正确。我认为核心问题是你的JSON末尾有一个尾随逗号。您也不会在声明中关闭开头报价。

如果你使用here-string,你可能会有更轻松的时间。这就是你不必使用所有这些反叛。

$jsonParams = @"
{
     "TaskName": "$taskName",
      "ExitCode": "$exitCode",
      "ErrorMessage": "$errorMessage"
   }
"@

$jsonObject = $jsonParams | ConvertFrom-Json

$jsonObject已经是自定义对象,不再是JSON。你不需要做任何与它有关的事情。删除param块中的类型,只需调用脚本中的属性即可。

param (
    [string]$param1,
    [string]$param2,
    $jsonObject
)
$jsonObject.TaskName