如何使用PowerShell脚本读取odata url并将其另存为json文件

时间:2018-06-30 11:19:56

标签: json powershell odata powershell-v2.0 powershell-v3.0

当我尝试使用以下PowerShell命令读取此网址时,无法打开页面

Start-Process "iexplore.exe" "https://sitename//odata/ScheduledJobs?$format=json&$expand=Application($select=Id,Name,AssetId;$expand=Asset($select=Id,Name)),JobType,JobInstances($filter=StartTime+eq+null;$orderby=NextRunTime+asc;$top=1),CompletedJobs($orderby=StartTime+desc;$top=1;$expand=State;$select=Id,StateId,StartTime,EndTime)&$top=20&$orderby=ScheduleStart&$filter=Enabled+eq+true&$count=true"

Get-Process | Out-File -filepath C:\Users\S.Papolu\Downloads\ScheduledJobs1.json

如何在IE中打开该网址并下载json输出?

请对此提供帮助,感谢您的帮助,请发布代码

1 个答案:

答案 0 :(得分:2)

您在这里有两个问题。我想你自己回答了第一个。如何在Internet Explorer中打开URL?您的start-process语句可以做到这一点。

第二个问题可能与第一个问题无关:如何将JSON下载到文件中。

您可以查看invoke-webrequest cmdlet,以将URL的内容下载到文件中。 您想要类似

$uri = "https://sitename//odata/ScheduledJobs?`$format..."
iwr -Uri $uri -OutFile C:\Users\S.Papolu\Downloads\ScheduledJobs1.json -UseBasicParsing

请注意,在URL的内容中使用双引号,在内容中的$之前使用反引号。您需要这样的命令来告诉powershell将$作为文字传递,而不是尝试在此处替换名为FORMAT的变量。

如果您需要凭据来访问https://sitename,那么如果您的站点使用客户端访问证书,则可以使用certificatecertificatethumbprint参数,如果您的站点使用客户端访问证书,则可以使用UseDefaultCredentials参数您当前的凭据在该网站上工作,或者您可能需要创建标头集合并使用Authorization标头并传递有效令牌。

$headers=@{"Authorization"="Bearer Your_BearerTokenHere"}
iwr -Uri $uri -OutFile 'C:\Users\S.Papolu\Downloads\ScheduledJobs1.json' -UseBasicParsing -Headers $headers

如果uri是纯REST终结点,您也可以尝试使用invoke-restmethod cmdlet。

最后,您可以尝试使用此方法的变体,以将JSON转换为局部变量,例如

$response = iwr ....
$json = $response.Content | ConvertFrom-JSon

除非您确实试图将内容保存到文件中以供以后使用。