2014-05-04 2 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

Смежные вопросы