【问题标题】:Powershell API Post Variable to DucksboardPowershell API 将变量发布到 Ducksboard
【发布时间】:2013-03-09 13:20:12
【问题描述】:

尝试使用我从 Github 获取的以下 Powershell 脚本将数据推送到 Ducksboard 仪表板。该函数运行良好,但是我需要输入一个变量作为数据的一部分。在对函数的两个调用中,包含在实际值 44 中的函数可以正常工作,但是如果我用它代替我的变量 $qtybord 函数就会失败。我尝试了多种选项来克服单引号内的 var 但无法使其正常工作 - 谁能帮助我?

# Squirt data to Duscksboard
    function Execute-DucksboardApi
    {
      param(
        [string] $url = $null,
        [string] $data = $null,
        [string] $apikey = $null,
        [string] $contentType = "application/json",
        [string] $codePageName = "UTF-8",
        [string] $userAgent = $null
      );

      if ($url -and $data -and $apikey)
      {
        [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);
        $webRequest.ServicePoint.Expect100Continue = $false;
        [System.Net.NetworkCredential]$credentials = New-Object System.Net.NetworkCredential($apikey, 'ignored');
        $webRequest.Credentials = $credentials.GetCredential($url, 'Basic');
        $webRequest.PreAuthenticate = $true;
        $webRequest.ContentType = $contentType;
        $webRequest.Method = "POST";
        if ( $userAgent )
        {
          $webRequest.UserAgent = $userAgent;
        }

        $enc = [System.Text.Encoding]::GetEncoding($codePageName);
        [byte[]]$bytes = $enc.GetBytes($data);
        $webRequest.ContentLength = $bytes.Length;
        [System.IO.Stream]$reqStream = $webRequest.GetRequestStream();
        $reqStream.Write($bytes, 0, $bytes.Length);
        $reqStream.Flush();

        $resp = $webRequest.GetResponse();
        $rs = $resp.GetResponseStream();
        [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;
        $sr.ReadToEnd();
      }
    }

    $qtybord = 44

    Execute-DucksboardApi -url 'https://push.ducksboard.com/v/123752/' -data '{"value": $qtybord}' -apikey 'tu2j3d3epqytWZD1haHnjJSJ1NqBrmvPe5SONc0VYge4BbIPi0'

Execute-DucksboardApi -url 'https://push.ducksboard.com/v/123752/' -data '{"value": 44}' -apikey 'tu2j3d3epqytWZD1haHnjJSJ1NqBrmvPe5SONc0VYge4BbIPi0'

*

【问题讨论】:

    标签: windows powershell scripting powershell-2.0


    【解决方案1】:

    试试这个:

    -data "{`"value`": $qtybord}"
    

    -data "{""value"": $qtybord}"
    

    单引号中的变量不展开,双引号中需要对字符串中的双引号进行转义。

    【讨论】:

      【解决方案2】:

      所以让 -data 参数改为使用 $data 并让 $data = '{"value": ' + $qtyboard + '}' 或者只是将整个东西包装在 -data 之后的括号中。

      此外,如果您使用的是 PowerShell v3,则可以使用以下内容:

      $data = New-Object -Type PSObject -Property @{
         value = $qtyboard
      } | ConvertTo-JSON
      

      【讨论】:

      • 嗨,克里斯,感谢您的回复,但是 $data = '{"value": ' + $qtybord + '}' 仍然失败并出现错误。
      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 2016-08-28
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多