Azure 在启动作业中运行时调用未到达API的Web请求Post
我有一个powershell脚本,它调用一个API,我正试图在Azure runbook中运行该API以实现自动化。从Web请求返回响应需要4分钟以上的时间,因此我只需启动并忘记它,以避免在Azure中触发错误 我试过使用Start-Job和-asJob,但两个都没有成功。我是powershell的新手,我曾疯狂地尝试过谷歌搜索,但运气不太好 当不作为作业运行时,一切正常。任何帮助都将不胜感激 编辑:经过进一步挖掘,我认为这是因为Azure的powershell处于“受限语言模式”,或者至少受到某种限制,因为我收到此错误Azure 在启动作业中运行时调用未到达API的Web请求Post,azure,powershell,azure-powershell,Azure,Powershell,Azure Powershell,我有一个powershell脚本,它调用一个API,我正试图在Azure runbook中运行该API以实现自动化。从Web请求返回响应需要4分钟以上的时间,因此我只需启动并忘记它,以避免在Azure中触发错误 我试过使用Start-Job和-asJob,但两个都没有成功。我是powershell的新手,我曾疯狂地尝试过谷歌搜索,但运气不太好 当不作为作业运行时,一切正常。任何帮助都将不胜感激 编辑:经过进一步挖掘,我认为这是因为Azure的powershell处于“受限语言模式”,或者至少受到
无法调用方法。在此语言模式下,仅在核心类型上支持方法调用。
而且脚本在本地计算机上运行良好。有没有其他方法可以让你忘记
脚本:
Start-Job -ScriptBlock {
$url = "api.com/apitocall"
$ID = [System.guid]::New("id")
$ApiKey = "apikey"
$credPair = "$($ID):$($ApiKey)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
$headers = @{ Authorization = "Basic $encodedCredentials" }
$headers.Add('Accept','Application/Json')
$responseData = Invoke-WebRequest -Uri $url -Method POST -Headers $headers -
UseBasicParsing -TimeoutSec 660
Write-Output($responseData)
}
Get-Job | Wait-Job
输出:
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost ...
1 Job1 BackgroundJob Completed True localhost ...
我从未听说过,但使用
$ExecutionContext.SessionState.LanguageMode='FullLanguage'
似乎很容易绕过它。很遗憾,我无法测试。为什么不使用System.Net.webrequest
$uri=“YourURL”$r=[System.Net.WebRequest]::Create($uri)$r、 方法=“获取”$resp=$r.GetResponse()$reqstream=$resp.GetResponseStream()$sr=新对象System.IO.StreamReader$reqstream$结果=$sr.ReadToEnd()$结果代码>不幸的是,这些解决方案不起作用。我可以通过将文本编码部分移到脚本块之外来运行作业。。。由于某种原因,这是抛出错误。我想出的最佳解决方案是启动作业,让它启动,然后在Azure超时之前关闭作业。虽然不理想,但我认为这是目前在Azure中可以做到的最好的事情!