Powershell REST API失败:调用WebRequest:404
Powershell代码bellow将值写入和读取到Google Sheets工作正常,应使用API在应用程序脚本项目中运行函数myfunction,但Invoke WebRequest返回错误bellow:Powershell REST API失败:调用WebRequest:404,powershell,google-apps-script,http-status-code-404,google-apps-script-api,invoke-webrequest,Powershell,Google Apps Script,Http Status Code 404,Google Apps Script Api,Invoke Webrequest,Powershell代码bellow将值写入和读取到Google Sheets工作正常,应使用API在应用程序脚本项目中运行函数myfunction,但Invoke WebRequest返回错误bellow: Invoke-WebRequest : 404. That’s an error. The requested URL /v1/scripts/=ya29.a0Ae4lvC3k8aahOCPBgf-tRf4SRFxdcCE97fkbXLAJqZ4zRCLnBp9prwEcBYBAf lYP
Invoke-WebRequest : 404. That’s an error. The requested URL /v1/scripts/=ya29.a0Ae4lvC3k8aahOCPBgf-tRf4SRFxdcCE97fkbXLAJqZ4zRCLnBp9prwEcBYBAf
lYP6zyW3fLeD3u4iSw5jYtDAdgZiSsTjzQbCpj9e_ahCA0xwC_1NBTjYkPwqFdLli7LNpfFcuedFDhdUpfnKTRZdbBWIf2ZyxyuGc6p was not found on this server. That’s
all we know.
No C:\Users\F76254C\Desktop\Nova pasta\Batch files\Available Projects\Latam HIL Lab Menu\libs\Google\WriteToGoogleSheets.ps1:64 caractere:13
+ $resp = Invoke-WebRequest -Uri "https://script.googleapis.com/v1/ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
我不确定请求主体的JSON表示是否设置正确,或者错误是否是由其他原因引起的
Powershell代码:
function doit{
$json = ".\client_id.json"
$jdata = get-content $json | convertfrom-json
<#
$jdata | ForEach-Object {
$_.PSObject.Properties.Value
}
#>
$ClientID = $jdata.web.client_id.ToString()
$ClientSecret = $jdata.web.client_secret.ToString()
$refreshToken = "1//04VvG_FTyDGhiCgYIARAAGAQSNwF-L9IrZ-o1kaZQQccvzL5m4TUTNz6b9Q4KCb16t4cH11gGCshWZWvgaCoMlg73FgpLAGOYTEk"
$grantType = "refresh_token"
$requestUri = "https://accounts.google.com/o/oauth2/token"
$GAuthBody = "refresh_token=$refreshToken&client_id=$ClientID&client_secret=$ClientSecret&grant_type=$grantType"
$GAuthResponse = Invoke-RestMethod -Method Post -Uri $requestUri -ContentType "application/x-www-form-urlencoded" -Body $GAuthBody
$accessToken = $GAuthResponse.access_token
$headers = @{"Authorization" = "Bearer $accessToken"
"Content-type" = "application/json"}
$DocumentID = "1htbeGlqZ4hojQBWl9fxE4nW_KZI9uVwi0ApzNOIbwnY"
$currentDate = (Get-Date).ToString('MM/dd/yyyy')
$currentTime = (Get-Date).ToString('HH:mm:sstt')
$json = @”
{
"range": "HIL_APP!A1:G1",
"majorDimension": "ROWS",
"values":
[[
"HIL_NAME",
"$env:ComputerName",
"$currentDate",
"$currentTime",
"$env:UserName",
"input from user",
"attempt"
],]
}
“@
$write = Invoke-WebRequest -Uri "https://sheets.googleapis.com/v4/spreadsheets/$DocumentID/values/HIL_APP!A1:G1:append?valueInputOption=USER_ENTERED&access_token=$($accessToken)" -Method Post -ContentType "application/json" -Body $json
$read = Invoke-WebRequest -Uri "https://sheets.googleapis.com/v4/spreadsheets/$DocumentID/values/HIL_APP!A1:G1?access_token=$($accessToken)"
Write-Output "Response: " ($read.Content | ConvertFrom-Json)
$scriptId = "1eF7ZaHH-pw2-AjnRVhOgnDxBUpfr0wALk1dVFg7B220bg_KuwVudbALh"
$json = @”
{
"function": "myfunction",
"parameters": [
"attempt" string
],
"devMode": true
}
“@
$resp = Invoke-WebRequest -Uri "https://script.googleapis.com/v1/scripts/$scriptId:run?access_token=$($accessToken)" -Method Post -ContentType "application/json" -Body $json
# Write-Output "Response: " ($resp.Content | ConvertFrom-Json)
}
clear
doit
编辑:
谷歌应用程序脚本代码:
function toSpreadsheet(text2write)
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("HIL_APP");
for (var i = 1; i < sheet.getLastRow(); i++)
{
sheet.getRange(i+1, 8, 1).setValue(text2write)
}
return "myreturn"
}
function myfunction(params)
{
toSpreadsheet(params)
}
您可以确认用于编写和读取Google Sheets值的脚本工作正常。
您只想使用Apps脚本API修改运行Google Apps脚本的脚本。
您已经能够使用应用程序脚本API。
您的访问令牌可用于运行Google Apps脚本。
您希望使用powershell的Invoke WebRequest实现这一点。
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一
修改点:
根据您的错误消息和脚本,我想提出以下修改点。
从…起https://script.googleapis.com/v1/scripts/$scriptId:run?access_token=$$accessToken tohttps://script.googleapis.com/v1/scripts/${scriptId}:运行
在脚本中,端点是https://script.googleapis.com/v1/scripts/. 这是一个不完整的端点。
我认为您当前错误消息的原因是由于此。
请在请求标头处使用访问令牌,而不是查询参数。
我认为这也可以说是使用了API。
我认为那个尝试字符串就是尝试。
请将“修改为”。
修改脚本:
当脚本中的请求应用程序脚本API被修改时,它将变成如下所示
$scriptId = "1eF7ZaHH-pw2-AjnRVhOgnDxBUpfr0wALk1dVFg7B220bg_KuwVudbALh"
$json = @"
{
"function": "myfunction",
"parameters": ["attempt"],
"devMode": true
}
"@
$resp = Invoke-WebRequest -Uri "https://script.googleapis.com/v1/scripts/${scriptId}:run" -Method Post -ContentType "application/json" -Body $json -Headers @{"Authorization"="Bearer ${accessToken}"}
注:
在我的环境中,我可以确认上面修改的脚本是有效的。不幸的是,我无法理解您设置使用应用程序脚本API运行谷歌应用程序脚本的流程。因此,如果在您的环境中发生错误,请再次确认使用应用程序脚本API运行脚本的设置。
我认为Bearer${accessToken}也可以修改为Bearer$accessToken。
参考:
如果我误解了你的问题,而这不是你问题的直接解决办法,我道歉
您可以确认用于编写和读取Google Sheets值的脚本工作正常。
您只想使用Apps脚本API修改运行Google Apps脚本的脚本。
您已经能够使用应用程序脚本API。
您的访问令牌可用于运行Google Apps脚本。
您希望使用powershell的Invoke WebRequest实现这一点。
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一
修改点:
根据您的错误消息和脚本,我想提出以下修改点。
从…起https://script.googleapis.com/v1/scripts/$scriptId:run?access_token=$$accessToken tohttps://script.googleapis.com/v1/scripts/${scriptId}:运行
在脚本中,端点是https://script.googleapis.com/v1/scripts/. 这是一个不完整的端点。
我认为您当前错误消息的原因是由于此。
请在请求标头处使用访问令牌,而不是查询参数。
我认为这也可以说是使用了API。
我认为那个尝试字符串就是尝试。
请将“修改为”。
修改脚本:
当脚本中的请求应用程序脚本API被修改时,它将变成如下所示
$scriptId = "1eF7ZaHH-pw2-AjnRVhOgnDxBUpfr0wALk1dVFg7B220bg_KuwVudbALh"
$json = @"
{
"function": "myfunction",
"parameters": ["attempt"],
"devMode": true
}
"@
$resp = Invoke-WebRequest -Uri "https://script.googleapis.com/v1/scripts/${scriptId}:run" -Method Post -ContentType "application/json" -Body $json -Headers @{"Authorization"="Bearer ${accessToken}"}
注:
在我的环境中,我可以确认上面修改的脚本是有效的。不幸的是,我无法理解您设置使用应用程序脚本API运行谷歌应用程序脚本的流程。因此,如果在您的环境中发生错误,请再次确认使用应用程序脚本API运行脚本的设置。
我认为Bearer${accessToken}也可以修改为Bearer$accessToken。
参考:
如果我误解了您的问题,并且这不是您问题的直接解决方案,我很抱歉。我做了您建议的更改,以前我的代码部署为Web App,但现在它部署为API可执行文件,因此我停止了错误,但仍然无法工作。google脚本项目上的函数myfunction未通过Powershell代码触发。Google脚本上的函数myfunction应该写入Google工作表,但它不会写入,但当我直接在Google应用程序脚本仪表板上运行该函数时,它确实可以工作。我已经插入了作用域[link],在我看来,只有这个作用域应该是enough@Cleber感谢您的回复。不幸的是,从你的回答和问题,我无法了解你的详细情况。这是因为我的技术差。对此我深表歉意。我认为,首先,为了确认应用程序脚本API的设置,使用一个简单的Google应用程序脚本进行测试怎么样?因为您的问题是使用应用程序脚本API运行函数。例如,函数myFunction{return ok}。当返回ok时,表示您的setti
吴是对的。这个怎么样?你的建议很好!我已经做到了,而且做得很好。这意味着powershell和GAS之间的通信正常。我已经创建了另一个帖子来讨论这个问题——写到电子表格,所以每个人都可以从这里看到链接:@Cleber Marques谢谢你的回复。我很高兴您可以使用应用程序脚本API。我想考虑一下你的新问题。我做了你建议的更改,以前我的代码被部署为Web应用程序,但现在它被部署为API可执行文件,因此我不再收到错误,但仍然无法工作。google脚本项目上的函数myfunction未通过Powershell代码触发。Google脚本上的函数myfunction应该写入Google工作表,但它不会写入,但当我直接在Google应用程序脚本仪表板上运行该函数时,它确实可以工作。我已经插入了作用域[link],在我看来,只有这个作用域应该是enough@Cleber感谢您的回复。不幸的是,从你的回答和问题,我无法了解你的详细情况。这是因为我的技术差。对此我深表歉意。我认为,首先,为了确认应用程序脚本API的设置,使用一个简单的Google应用程序脚本进行测试怎么样?因为您的问题是使用应用程序脚本API运行函数。例如,函数myFunction{return ok}。返回ok时,表示您的设置正确。这个怎么样?你的建议很好!我已经做到了,而且做得很好。这意味着powershell和GAS之间的通信正常。我已经创建了另一个帖子来讨论这个问题——写到电子表格,所以每个人都可以从这里看到链接:@Cleber Marques谢谢你的回复。我很高兴您可以使用应用程序脚本API。我想考虑一下你的新问题。