卷曲和powershell json的困境

时间:2018-04-17 12:11:45

标签: json powershell curl

我仍然遇到让json使用powershell中的curl命令的问题。

即使将一些东西弹回弹性的简单请求也会因错误而失败

意外字符('D'(代码68)):期望双引号开始字段名称

我已经将脚本删除了基础,只是为了尝试测试curl和json并仍然失败

$curlExe = "h:\powershell\esb\elastic\curl\curl.exe"

$elasticdata = @{
        timereceived = "test"
        timesent     = "testing"
        name         = "anon"
        status       = 0
    }

$curldata = $elasticdata | convertto-json -Compress

$elasticoutput = "h:\powershell\esb\elastic\elastic.txt"
$elastichost   = "http://localhost:9200/newtest20/filecopy/?pretty"
$elasticheader = "content-type: application/json"
$elamethod     = "POST"

$curlargs = $elastichost,
            '-X',$elamethod,
            '-d',$curldata,
            '-H',$elasticheader

& $curlexe @curlargs

1 个答案:

答案 0 :(得分:0)

如果您的服务器正在运行Powershell 2.0,您将不会Invoke-webRequest,但ConvertTo-Json也将丢失。 我过去也遇到过这个问题,我使这些功能解决了这个问题

function Invoke-WebRequest([string] $Url, [string] $Method, $BodyObject)
{    
    $request = [System.Net.WebRequest]::Create($Url)
    $request.Method = $Method
    $request.ContentType = "application/json"

    if ($Method -eq "POST")
    {
        try
        {
            $body = ConvertTo-Json20 -InputObject $BodyObject
            $requestStream = $request.GetRequestStream()
            $streamWriter = New-Object System.IO.StreamWriter($requestStream)
            $streamWriter.Write($body)            
        }

        finally
        {
            if ($null -ne $streamWriter) { $streamWriter.Dispose() }
            if ($null -ne $requestStream) { $requestStream.Dispose() }
        }
    }

    $response = $request.GetResponse()    
    if ($response.StatusCode -ne [System.Net.HttpStatusCode]::OK)
    {
        throw "ERROR Could not $Method url [$Url]"
    }

    return $response
}

function ConvertTo-Json20($InputObject){
    Add-Type -Assembly System.Web.Extensions
    $jsonSerializer = New-Object System.Web.Script.Serialization.JavascriptSerializer

    return $jsonSerializer.Serialize($InputObject)
}