使用PassThru时,Invoke-RestMethod OutFile为空

时间:2017-03-24 21:22:39

标签: rest powershell output cmdlet

使用PowerShell 4.0和Invoke-RestMethod cmdlet。我遇到了-OutFile和-PassThru选项的问题。 每当我添加-PassThru选项时,我的-OutFile都会被创建,但内容为空!

根据Invoke-RestMethod Documentation,当这些选项一起使用时,输出文件和管道对象都应该可用。 “ - OutFile将响应正文保存在指定的输出文件中。[...]要将结果发送到文件和管道,请使用Passthru参数。”

这是一个测试来重复我遇到的问题。在这里,我正在调用一个rest api,试图保存对文件的响应并反序列化为一个PowerShell对象。

"POWERSHELL VERSION $($host.Version.ToString())"
$date = Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt" -PassThru
Get-Content "OutFile.txt"
# FILE IS EMPTY!!! PASSTHRU SEEMS TO RESULT IN EMPTY FILE
$date
# powershell object has the date received from api

以下两个测试用于验证Invoke-RestMethod的正常功能而不使用PassThru选项

# ... Test # 1, call rest api and deserialize into powershell object
$date = Invoke-RestMethod "http://date.jsontest.com"
$date
# Output shows the date retrieved from sample restful service
# ... Test # 2, call rest api and save response body directly to a file
Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt"
Get-Content "OutFile.txt"
# Output shows contents of rest api response body (json text)

我认为这些测试可以帮助其他人看到我遇到的麻烦。我的问题是,是否有使我无法完成这项工作,或者这是否是cmdlet的错误?我已经用Google搜索了一些解决方案,没有明显的问题报告。我想使用-OutFile作为另一个与内容编码相关的Invoke-RestMethod问题的解决方法的一部分,如Bug? Invoke-RestMethod and UTF-8 data所述。 -PassThru选项有助于我查看返回的数据并终止多请求(分页)odata结果集的迭代。

1 个答案:

答案 0 :(得分:0)

我相信-PassThru开关仅将所有输出重定向到控制台,这就是为什么您的文件为空的原因。但是,由于您拥有一个变量,因此可以再添加一行。 。

Write-Output -InputObject $date | Out-File -FilePath "OutFile.txt"