2015-12-08 116 views
2

我對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" 

,並在調用的腳本 -

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

但是,調用腳本拋出錯誤

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

有什麼不對的碼。另外,在將json對象傳遞給被調用的腳本之後,我應該如何訪問它的值。

謝謝!

回答

3

您的JSON格式錯誤。我認爲核心問題是在JSON結尾處有一個尾隨逗號。你也不要在你的聲明中關閉開頭報價。

如果您爲此使用here字符串,您可能會更容易。這是你不必使用所有反引號。

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

$jsonObject = $jsonParams | ConvertFrom-Json 

$jsonObject已經是一個自定義對象,不再JSON。你不需要做任何特別的事情。刪除param塊中的類型,只需調用腳本中的屬性即可。

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

這只是一個部分答案,因爲您仍然會得到該類型轉換的錯誤。我不使用它,所以我不確定除了文本不再是JSON之外,還有其他問題。 – Matt

+0

這只是輸入問題時的錯字,實際上我的代碼中有更多參數。所以我複製粘貼他們幾個。此外,報價也適當關閉。如你的代碼所示,我添加了這裏的字符串頭,但同樣是錯誤:( – Saurabh

+0

你能告訴我一個例子,你傳遞給變量,使JSON的?你可以打印herestring或你的字符串http://jsonlint.com/看看問題出在哪裏,你有一個你現在感覺到的語法錯誤 – Matt

相關問題