2014-05-04 148 views
0

我寫了一些代碼,試圖從一個Rest API獲取值並將其發佈到另一個。 我將代碼保存在.ps1文件中。如果我編輯它並運行它(或者將它複製並粘貼到一個空的PowerShell終端中),它可以達到我的預期。但是,當我嘗試直接運行相同的.ps1文件時,第二個Invoke-RestMethod出現錯誤。PowerShell運行PowerShell代碼工作,執行爲.ps1不

不明白爲什麼我會得到不同的結果,並且錯誤消息沒有給我多少線索。

我在做什麼錯?

我使用的代碼是(與修改API密鑰):

$encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($APIkey+":")) 
$headers = @{"Content-Type" = "application/json"; "AUTHORIZATION" = "Basic $encoded"} 
$APIkey = "123456789" 
$metricId = "123" 

$r = Invoke-RestMethod -Uri https://coinbase.com/api/v1/currencies/exchange_rates 
$metric = [PSCustomObject]@{ 
    value = [Math]::Round($r.btc_to_eur, 2) 
} 

$baseuri = "https://api.numerousapp.com/v1/metrics/$metricId/events" 
$data = ConvertTo-Json $metric 
Invoke-RestMethod -Uri $baseuri -Body $data -Headers $headers -Method Post 

和錯誤消息,在運行的.ps1文件時,我得到的是:

Invoke-RestMethod : : At C:\NumerousBitcoinEur.ps1:13 char:1 + Invoke-RestMethod -Uri $baseuri -Body $data -Headers $headers -Method Post + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

我使用PowerShell 4.0

+0

當我在粘貼控制檯或從ISE運行時遇到同樣的錯誤。所以我不認爲ps1文件與它有任何關係。 – bouvierr

回答

2

$APIkey正在設置之後它正在被使用,它必須是錯的。它可能在控制檯工作,因爲$APIkey恰好已經設置。

如果您喜歡(我認爲這是一個好主意),您可以將以下內容添加到腳本的頂部以捕獲像這樣的錯誤。

Set-StrictMode -Version Latest 
+0

非常感謝!你是對的,這是問題,它在控制檯中工作,因爲它確實已經設置好了。我試圖徹底重新啓動控制檯,並在手動運行時遇到同樣的問題。簡直不敢相信這個問題是那麼的愚蠢! 感謝您使用'Set-StrictMode -Version Latest'的提示,不知道那個,看起來非常有幫助。 – Fish

相關問題