我使用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几乎一无所知,任何帮助都将被接受。
1条答案
按热度按时间qlzsbp2j1#
问题是,在构建URL时,您实际上在URL周围添加了多余的单引号。我会解释的在第一个(工作)代码中,您执行
Invoke-RestMethod
小程序,第一个参数是字符串格式的URL。你可以用单引号把它括起来,这是定义字符串的有效方法。如果你事先把这个字符串赋值给一个变量,你会以同样的方式完成它:
$URL
的值不包括那些单引号,就像你试图访问网页时不会在浏览器中放置那些引号一样。其值很简单:现在,当您构建第二个URL时,您使用双引号来定义字符串,这也是声明字符串值的有效方法。在这些双引号中,您还在字符串的开头和结尾处包含了单引号。所以,如果你把这个URL赋值给一个变量,就像我上面的例子一样,它看起来像这样:
$URL
的值扩展了变量,并将字符串部分连接在一起,所以现在$URL
的值看起来像这样:请注意,以前值没有任何引号,现在它有单引号。您的解决方案是删除开头和结尾的单引号。因为你使用的是双引号,所以它会扩展简单的字符串变量,所以你不必做整个
"abc"+$VarA+"def"
的事情,只要把它都放在双引号里就行了。考虑到这一点,定义$URL
看起来像这样:然后
$URL
的值看起来类似于我的第一个例子: