2013-03-20 39 views
0

试图使用我从Github获取的将数据推送到Ducksboard控制面板的以下Powershell脚本。该函数工作得很好,但是我需要将一个变量作为数据的一部分。在下面包含的函数中,推入实际值44的函数的两个调用工作正常,但是如果将其替换为我的变量$ qtybord,则该函数将失效。我已经尝试了很多选项来克服单引号内的变量,但无法让它起作用 - 任何人都可以帮助我吗?Powershell API Post变量到Ducksboard

# 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' 

*

回答

0

试试这个:

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

-data "{""value"": $qtybord}" 
在单引号变量

不展开,在双引号,你需要逃避内部双引号字符串。

+0

太棒了 - 第二个选项工作。非常感谢!!! – Gebraffe 2013-03-20 16:20:01

+0

@Gebraffe乐于帮忙! – 2013-03-20 17:12:59

0

因此,请使-data参数取值为$ data,并使$ data ='{“value”:'+ $ qtyboard +'}'或在数据之后将其包装在parens中。

另外,如果你在PowerShell的V3,你可以用这样的打法:

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

嗨克里斯,感谢您的回应,但$ data ='{“value”:'+ $ qtybord +'}'仍然失败,错误。 – Gebraffe 2013-03-20 16:10:50