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

Sau*_*abh 4 powershell json

我对 powershell 的东西还很陌生。所以这里需要一些帮助。

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

调用脚本:

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

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

Invoke-Expression "& `"$scriptPath`" $argumentList"
Run Code Online (Sandbox Code Playgroud)

并在调用的脚本中 -

param (
    [string]$param1,
    [string]$param2,
    [Microsoft.PowerShell.Commands.JsonObject]$jsonObject
)
Run Code Online (Sandbox Code Playgroud)

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

ConvertFrom-Json : Invalid object passed in, ':' or '}' expected. (21): {
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!

Mat*_*att 6

您的 JSON 格式错误。我认为核心问题是 JSON 末尾有一个逗号。您也不要在声明中关闭开盘报价。

无论如何,如果您使用此处字符串,您可能会更容易。这是你不必使用所有这些反引号。

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

$jsonObject = $jsonParams | ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)

$jsonObject已经是自定义对象,不再是 JSON。你不需要用它做任何特别的事情。删除参数块中的类型,然后仅调用脚本中的属性。

param (
    [string]$param1,
    [string]$param2,
    $jsonObject
)
$jsonObject.TaskName
Run Code Online (Sandbox Code Playgroud)