【问题标题】:Running PowerShell code in powershell works, executing as .ps1 doesn't在 powershell 中运行 PowerShell 代码有效,作为 .ps1 执行不
【发布时间】:2014-05-04 09:48:03
【问题描述】:

我编写了一些代码,试图从一个 Rest API 中获取一个值并将其发布到另一个。 我将代码保存在 .ps1 文件中。如果我编辑它并运行它(或者只是将它复制并粘贴到一个空的 PowerShell 终端中),它会达到我的预期。但是,当我尝试直接运行相同的 .ps1 文件时,在第二个 Invoke-RestMethod 上出现错误。

不明白为什么我得到不同的结果并且错误消息没有给我很多线索。

我做错了什么?

我使用的代码是(修改后的 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

【问题讨论】:

  • 我在控制台中粘贴或从 ISE 运行时遇到与您相同的错误。所以我不认为 ps1 文件与它有任何关系。

标签: powershell powershell-4.0


【解决方案1】:

$APIkey 被设置被使用之后,这肯定是错误的。它可能在控制台中有效,因为 $APIkey 恰好已经设置。

如果您愿意(我认为这是个好主意),您可以将以下内容添加到脚本的顶部以捕获类似这样的错误。

Set-StrictMode -Version Latest

【讨论】:

  • 非常感谢!你是绝对正确的,这就是问题所在,它在控制台中工作,因为它确实已经设置好了。我尝试完全干净地重新启动控制台,并在手动运行时遇到了同样的问题。无法相信问题是如此愚蠢!感谢您提供有关“Set-StrictMode -Version Latest”的提示,不知道那个提示,看起来很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多