json 在单引号内传递变量的PowerShell Replike_RestMethod

mqkwyuun  于 2023-10-21  发布在  Shell
关注(0)|答案(1)|浏览(115)

我使用powershell使用INCOKE-RestMethod和GET方法获取数据
到目前为止,我在PowerShell上做了这个

$response = Invoke-RestMethod 'www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10' -Method 'GET' -Headers $Headers

$response | ConvertTo-Json -Depth 100 | Out-File "C:\Users\Admin\Desktop\sample.json" -Encoding UTF8

工程完美无瑕-没有投诉,然而,我试图自动化,这样我就不必运行每个月.
所以我先试了这个来测试-

$lastmonth11th = (Get-Date -Day 11).AddMonths(-1).ToString("yyyy-MM-dd")

$thismonth10th = (Get-Date -Day 10).ToString("yyyy-MM-dd")

$response_text = "'www.sample.net/data?key=1234&Accept=application/JSON&startdate="+$lastmonth11th+"&endadte="+$thismonth10th+"'"

Write-Output $lastmonth11th
Write-Output $thismonth10th
Write-Output $response_text

当我执行它的时候-它给了我我需要的结果

2023-08-11
    2023-09-10

'www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10'

但是如果我尝试$response_text,它会失败。

$response = Invoke-RestMethod $response_text -Method 'GET' -Headers $Headers


$response | ConvertTo-Json -Depth 100 | Out-File "C:\Users\Admin\Desktop\sample.json" -Encoding UTF8

“无效URI:无法分析主机名,
所以我尝试在$response_text前面添加-Uri-仍然没有成功,
我做错了什么?我对PowerShell几乎一无所知,任何帮助都将被接受。

qlzsbp2j

qlzsbp2j1#

问题是,在构建URL时,您实际上在URL周围添加了多余的单引号。我会解释的在第一个(工作)代码中,您执行Invoke-RestMethod小程序,第一个参数是字符串格式的URL。你可以用单引号把它括起来,这是定义字符串的有效方法。

$response = Invoke-RestMethod 'www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10'

如果你事先把这个字符串赋值给一个变量,你会以同样的方式完成它:

$URL = 'www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10'

$URL的值不包括那些单引号,就像你试图访问网页时不会在浏览器中放置那些引号一样。其值很简单:

www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10

现在,当您构建第二个URL时,您使用双引号来定义字符串,这也是声明字符串值的有效方法。在这些双引号中,您还在字符串的开头和结尾处包含了单引号。所以,如果你把这个URL赋值给一个变量,就像我上面的例子一样,它看起来像这样:

$URL = "'www.sample.net/data?key=1234&Accept=application/JSON&startdate="+$lastmonth11th+"&endadte="+$thismonth10th+"'"

$URL的值扩展了变量,并将字符串部分连接在一起,所以现在$URL的值看起来像这样:

'www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10'

请注意,以前值没有任何引号,现在它有单引号。您的解决方案是删除开头和结尾的单引号。因为你使用的是双引号,所以它会扩展简单的字符串变量,所以你不必做整个"abc"+$VarA+"def"的事情,只要把它都放在双引号里就行了。考虑到这一点,定义$URL看起来像这样:

$URL = "www.sample.net/data?key=1234&Accept=application/JSON&startdate=$lastmonth11th&endadte=$thismonth10th"

然后$URL的值看起来类似于我的第一个例子:

www.sample.net/data?key=1234&Accept=application/JSON&startdate=2023-08-11&endadte=2023-09-10

相关问题