0

Github から取得した次の Powershell スクリプトを使用して、Ducksboard ダッシュボードにデータをプッシュしようとしています。関数はうまく機能しますが、データの一部として変数を入力する必要があります。実際の値 44 をプッシュする関数の下に含まれる関数への 2 つの呼び出しのうち、正常に動作しますが、変数 $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'

*

4

2 に答える 2

0

これを試して:

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

また

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

一重引用符では変数は展開されません。二重引用符では、文字列内の二重引用符をエスケープする必要があります。

于 2013-03-20T12:46:55.850 に答える
0

したがって、-data パラメーターが代わりに $data を取るようにし、$data = '{"value": ' + $qtyboard + '}' にするか、-data の後にその全体を括弧で囲みます。

また、PowerShell v3 を使用している場合は、次のようなもので遊ぶことができます。

$data = New-Object -Type PSObject -Property @{
   value = $qtyboard
} | ConvertTo-JSON
于 2013-03-20T12:48:02.153 に答える